20

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

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

int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
4

3 回答 3

51

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

如果_UNICODE已定义,则_tWinMain扩展为wWinMain。否则,_tWinMain与 相同WinMain

相关的宏看起来像这样(实际上还有很多其他代码穿插):

#ifdef  _UNICODE
#define _tWinMain  wWinMain
#else
#define _tWinMain  WinMain
#endif
于 2011-01-13T15:04:03.280 回答
26

不同之处在于参数的编码,无论如何都是完全多余的。只需丢弃参数,而是使用以下内容来控制编码:

hInstance只是GetModuleHandle(0)

hPrevInstance无论如何在 Win32 中无效

lpCmdLine分别在 ANSI 和 Unicode 中可用,通过GetCommandLineA()GetCommandLineW()

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

通过使用 Win32 API 访问这些,您可能会保存一些全局变量,例如您仔细保存您认为仅对WinMain.

于 2014-08-11T19:26:15.683 回答
1

这个链接

_tWinMain 实际上确实采用了 hPrevInstance 参数,但没有使用该参数。

_tWinMain 只是 WinMain 的 #define(在 TCHAR.h 中)。

两者没有区别。

如果未定义 UNICODE,则 _tWinMain 定义为 WinMain,如果定义了则定义为 wWinMain。它的目的是让您编写将在 ansi 和 unicode 下构建的代码。

于 2011-01-13T15:03:14.823 回答