"APIENTRY _tWinMain"和"WINAPI WinMain"的区别

xRo*_*bot 18 c++ windows winapi winmain

这两个功能有什么区别?:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)

int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 46

_tWinMain只是#definetchar.h中适当版本的快捷方式WinMain.

如果_UNICODE已定义,则_tWinMain扩展为wWinMain.否则,_tWinMain就是一样的WinMain.

相关的宏看起来像这样(实际上有很多其他代码散布在一起):

#ifdef  _UNICODE
#define _tWinMain  wWinMain
#else
#define _tWinMain  WinMain
#endif
Run Code Online (Sandbox Code Playgroud)


Ben*_*igt 21

不同之处在于参数的编码,无论如何都是完全冗余的.只需丢弃参数,然后使用以下命令控制编码:

hInstance 只是 GetModuleHandle(0)

hPrevInstance 无论如何在Win32中无效

lpCmdLineANSI和Unicode 分别提供via GetCommandLineA()GetCommandLineW()

nCmdShow是结构的wShowWindow参数STARTUPINFO.同样,ANSI和Unicode变体,使用GetStartupInfoA(STARTUPINFOA*)和访问GetStartupInfoW(STARTUPINFOW*).

通过使用Win32 API来访问它们,您可能会保存一些全局变量,例如您小心保存您认为仅可用的实例句柄的变量WinMain.