"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)
Ответы
Ответ 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, так и под юникодом.