Подтвердить что ты не робот

"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)
4b9b3361

Ответ 1

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

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

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

#ifdef  _UNICODE
#define _tWinMain  wWinMain
#else
#define _tWinMain  WinMain
#endif

Ответ 2

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

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

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

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

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

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

Ответ 3

От эта ссылка:

_tWinMain действительно принимает параметр hPrevInstance, но это параметр не используется.

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

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

и

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