“APIENTRY tWinMain” y “WINAPI WinMain” diferencia
Pregunta
¿Cuáles son las diferencias entre estos 2 función:?
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
Solución
_tWinMain
es sólo un acceso directo en #define
tchar.h a la versión adecuada de WinMain
.
Si se define _UNICODE
, luego se expande _tWinMain
a wWinMain
. De lo contrario, _tWinMain
es el mismo que WinMain
.
La macro miradas relevante algo como esto (en realidad hay un montón de otros códigos intercalados):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif
Otros consejos
La diferencia es la codificación de los parámetros, que son completamente todos modos redundante. Simplemente tirar a la basura los parámetros y en su lugar utilizar el siguiente, donde el control de la codificación:
hInstance
es sólo GetModuleHandle(0)
hPrevInstance
no es válida en Win32 todos modos
lpCmdLine
está disponible tanto en ANSI y Unicode, a través de GetCommandLineA()
y GetCommandLineW()
, respectivamente
nCmdShow
es el parámetro wShowWindow
de la estructura STARTUPINFO
. Una vez más, ANSI y Unicode variantes, visitada usando GetStartupInfoA(STARTUPINFOA*)
y GetStartupInfoW(STARTUPINFOW*)
.
Y mediante el uso de las API de Win32 para tener acceso a estos, lo que probablemente va a ahorrar unos cuantos variables globales, como en el que estabas ahorrando cuidadosamente el identificador de instancia que pensaba que era sólo está disponible para WinMain
.
tWinMain realmente hace tomar el parámetro hPrevInstance, pero eso parámetro isn''t utilizado.
_tWinMain es sólo un #define a WinMain (en tchar.h).
No hay ninguna diferencia entre el dos.
y
tWinMain se define a WinMain éste no se ha definido, y para wWinMain si lo es. su propósito es le permiten escribir código que va a construir ambos bajo ANSI y bajo Unicode.