这两个功能有什么不同?:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
答案 0 :(得分:45)
_tWinMain
只是tchar.h中的#define
快捷方式,适用于WinMain
的相应版本。
如果定义了_UNICODE
,则_tWinMain
会扩展为wWinMain
。否则,_tWinMain
与WinMain
相同。
相关的宏看起来像这样(实际上有很多其他代码散布在一起):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
答案 1 :(得分:20)
不同之处在于参数的编码,无论如何都是完全冗余的。只需丢弃参数,然后使用以下命令控制编码:
hInstance
只是GetModuleHandle(0)
hPrevInstance
在Win32中无效
lpCmdLine
同时提供ANSI和Unicode,分别通过GetCommandLineA()
和GetCommandLineW()
nCmdShow
是wShowWindow
结构的STARTUPINFO
参数。同样,使用GetStartupInfoA(STARTUPINFOA*)
和GetStartupInfoW(STARTUPINFOW*)
访问ANSI和Unicode变体。
通过使用Win32 API来访问这些,您可能会保存一些全局变量,例如您小心保存您认为仅适用于WinMain
的实例句柄的变量。
答案 2 :(得分:1)
来自this link:
_tWinMain实际上确实采用了hPrevInstance参数,但是 参数不被使用。
_tWinMain只是WinMain的#define(在TCHAR.h中)。
之间没有区别 2。
和
如果未定义UNICODE,则_tWinMain定义为WinMain,并且 wWinMain如果是的话。它的目的是为了 让你编写将构建的代码 在ansi和unicode下都有。