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

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下构建的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top