Разница "APIENTRY _tWinMain" и "WINAPI WinMain" - PullRequest
18 голосов
/ 13 января 2011

Чем отличаются эти 2 функции?:

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

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

Ответы [ 3 ]

45 голосов
/ 13 января 2011

_tWinMain - это просто ярлык #define в tchar.h для соответствующей версии WinMain.

Если определено _UNICODE, то _tWinMain расширяетсядо wWinMain.В противном случае _tWinMain совпадает с WinMain.

Соответствующий макрос выглядит примерно так (на самом деле много другого кода перемежается):

#ifdef  _UNICODE
#define _tWinMain  wWinMain
#else
#define _tWinMain  WinMain
#endif
21 голосов
/ 11 августа 2014

Разница заключается в кодировании параметров, которые в любом случае являются полностью избыточными. Просто отбросьте параметры и вместо этого используйте следующее, где вы управляете кодировкой:

hInstance это просто GetModuleHandle(0)

hPrevInstance недопустимо в Win32 в любом случае

lpCmdLine доступен как в ANSI, так и в Юникоде, через GetCommandLineA() и GetCommandLineW() соответственно

nCmdShow - это параметр wShowWindow структуры STARTUPINFO. Опять же, варианты ANSI и Unicode, доступ к которым осуществляется с помощью GetStartupInfoA(STARTUPINFOA*) и GetStartupInfoW(STARTUPINFOW*).

И используя Win32 API для доступа к ним, вы, вероятно, собираетесь сохранить несколько глобальных переменных, например ту, в которой вы тщательно сохраняли дескриптор экземпляра, который, как вы думали, был доступен только для WinMain.

1 голос
/ 13 января 2011

С эта ссылка :

_tWinMain фактически принимает параметр hPrevInstance, но этот параметр не используется.

_tWinMain - это просто #определить для WinMain (в TCHAR.h).

Нет никакой разницы между этими двумя.

и

_tWinMain определен для WinMain, если UNICODEне определено, а для wWinMain, если оно есть.его цель - позволить вам написать код, который будет собираться как под ANSI, так и под Unicode.

...