为使用CRT的Windows程序定义UNICODE
独立的WinMain
函数的正确方法是什么?
我倾向于认为应该是这样
WINAPI
#ifdef UNICODE
wWinMain
#else
WinMain
#endif
( ... ) {
...
}
但是,我想知道在编译源单元时(例如,在Windows头文件中提供的扩展为WinApiFuncA
或{{ 1}}。
答案 0 :(得分:2)
在<tchar.h>
中,宏_tWinMain
会根据项目设置扩展为WinMain
或wWinMain
。但是,这还不够。您还需要使用与字符集无关的lpCmdLine
声明第三个参数(LPTSTR
):
int APIENTRY _tWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nShowCmd
)
如果在项目上启用了Unicode,它将变成LPWSTR
,并提供签名:
int APIENTRY wWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nShowCmd
)
如果未启用Unicode,您将获得签名:
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)