【问题标题】:What is the correct way to define a UNICODE independent WinMain function?定义 UNICODE 独立 WinMain 函数的正确方法是什么?
【发布时间】:2019-07-16 15:33:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • _tWinMain 宏在 tchar.h 中定义并扩展为 wWinMainWinMain
  • 那么,我必须包含<tchar.h>吗?
  • @RenéNyffenegger RbMms 第一条评论就是答案。是的,您需要包含<tchar.h>
  • 为什么要支持 ANSI?

标签: winapi unicode linker winmain


【解决方案1】:

<tchar.h> 中,宏_tWinMain 扩展为WinMainwWinMain,具体取决于项目设置。但是,这还不够;您还需要使用与字符集无关的 LPTSTR 声明第三个参数 (lpCmdLine):

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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多