定义独立于UNICODE的WinMain函数的正确方法是什么?

时间:2019-02-22 14:03:33

标签: winapi unicode linker winmain

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

我倾向于认为应该是这样

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

但是,我想知道在编译源单元时(例如,在Windows头文件中提供的扩展为WinApiFuncA或{{ 1}}。

1 个答案:

答案 0 :(得分: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
)