«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)
Решение
_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*)
.
И, используя API Win32 для доступа к ним, вы, вероятно, сэкономите несколько глобальных переменных, например, в том, где вы тщательно сохранили ручку экземпляра, который, по вашему мнению, был доступен только для WinMain
.
Из эта ссылка:
_twinmain фактически принимает параметр hprevinstance, но этот параметр не используется.
_twinmain - это просто #Define Winmain (в tchar.h).
Нет разницы между ними.
а также
_twinmain определяется для Winmain, если Unicode не определен, и для Whinmain, если это так. Его цель состоит в том, чтобы позволить вам написать код, который будет построить как при ANSI, так и при Unicode.