“ Apientry _twinmain”和“ Winapi Winmain”差异
题
与这两个功能有什么区别?:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
解决方案
_tWinMain
只是一个 #define
tchar.h的快捷方式到适当的版本 WinMain
.
如果 _UNICODE
定义,然后 _tWinMain
扩展到 wWinMain
. 。否则, _tWinMain
是相同的 WinMain
.
相关的宏看起来像这样(实际上还有很多其他代码):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
其他提示
区别在于参数的编码,无论如何都是完全冗余的。只需扔掉参数,然后使用以下内容,您可以控制编码:
hInstance
只是 GetModuleHandle(0)
hPrevInstance
无论如何在Win32中无效
lpCmdLine
在ANSI和Unicode中都可以使用 GetCommandLineA()
和 GetCommandLineW()
, , 分别
nCmdShow
是个 wShowWindow
参数 STARTUPINFO
结构体。同样,ANSI和Unicode变体,使用 GetStartupInfoA(STARTUPINFOA*)
和 GetStartupInfoW(STARTUPINFOW*)
.
通过使用Win32 API访问这些API,您可能会节省一些全局变量,例如您仔细保存您认为只有可用的实例处理的一个变量 WinMain
.
从 这个链接:
_twinmain实际上确实采用了HPRevinstance参数,但该参数不使用。
_twinmain只是Winmain(在TCHAR.H中)的#Define。
两者之间没有区别。
和
_twinmain如果未定义Unicode,则将其定义为Winmain,如果是Unicode,则定义为Wwinmain。其目的是让您编写将在ANSI和Unicode下构建的代码。
不隶属于 StackOverflow