定义独立于 UNICODE 的 WinMain 函数的正确方法是什么?
What is the correct way to define a UNICODE independent WinMain function?
为使用 CRT 的 Windows 程序定义 UNICODE
独立 WinMain
函数的正确方法是什么?
我倾向于认为应该是这样的
WINAPI
#ifdef UNICODE
wWinMain
#else
WinMain
#endif
( ... ) {
...
}
但是,我想知道在编译源单元时是否还没有扩展为正确符号的预定义宏(例如 windows 头文件中提供的扩展为 WinApiFuncA
或 WinApiFuncW
.
在 <tchar.h>
中,宏 _tWinMain
扩展为 WinMain
或 wWinMain
,具体取决于项目设置。但这还不够;您还需要使用与字符集无关的 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
)
为使用 CRT 的 Windows 程序定义 UNICODE
独立 WinMain
函数的正确方法是什么?
我倾向于认为应该是这样的
WINAPI
#ifdef UNICODE
wWinMain
#else
WinMain
#endif
( ... ) {
...
}
但是,我想知道在编译源单元时是否还没有扩展为正确符号的预定义宏(例如 windows 头文件中提供的扩展为 WinApiFuncA
或 WinApiFuncW
.
在 <tchar.h>
中,宏 _tWinMain
扩展为 WinMain
或 wWinMain
,具体取决于项目设置。但这还不够;您还需要使用与字符集无关的 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
)