1

为使用 CRT 的 Windows 程序定义UNICODE独立函数的正确方法是什么?WinMain

我倾向于认为它应该是这样的

WINAPI
#ifdef UNICODE
  wWinMain
#else
  WinMain
#endif
 ( ... ) {
  ...
}

但是,我想知道在编译源单元时是否还没有预定义的宏可以扩展为正确的符号(就像 Windows 头文件中提供的扩展为WinApiFuncAWinApiFuncW.

4

1 回答 1

2

<tchar.h>中,宏_tWinMain扩展到WinMainwWinMain取决于项目设置。但是,这还不够;您还需要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
)
于 2019-02-22T17:29:23.673 回答