为使用 CRT 的 Windows 程序定义UNICODE
独立函数的正确方法是什么?WinMain
我倾向于认为它应该是这样的
WINAPI
#ifdef UNICODE
wWinMain
#else
WinMain
#endif
( ... ) {
...
}
但是,我想知道在编译源单元时是否还没有预定义的宏可以扩展为正确的符号(就像 Windows 头文件中提供的扩展为WinApiFuncA
或WinApiFuncW
.
在<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
)