c++ - first - Diferencia de "APIENTRY_tWinMain" y "WINAPI WinMain"
winapi create window (3)
Desde este enlace :
_tWinMain realmente toma el parámetro hPrevInstance, pero ese parámetro no se usa.
_tWinMain es solo un #define para WinMain (en TCHAR.h).
No hay diferencia entre los dos.
y
_tWinMain se define a WinMain si UNICODE no está definido, y a wWinMain si lo está. su propósito es permitirle escribir código que se compile tanto en ANSI como en Unicode.
¿Cuáles son las diferencias con estas 2 funciones ?:
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
La diferencia es la codificación de los parámetros, que son completamente redundantes de todos modos. Simplemente deseche los parámetros y, en su lugar, utilice lo siguiente, donde controla la codificación:
hInstance
es solo GetModuleHandle(0)
hPrevInstance
no es válido en Win32 de todos modos
lpCmdLine
está disponible en ANSI y Unicode, a través de GetCommandLineA()
y GetCommandLineW()
, respectivamente
nCmdShow
es el parámetro wShowWindow
de la estructura STARTUPINFO
. Nuevamente, las variantes ANSI y Unicode, a las que se accede utilizando GetStartupInfoA(STARTUPINFOA*)
y GetStartupInfoW(STARTUPINFOW*)
.
Y al utilizar las API de Win32 para acceder a ellas, probablemente guardará algunas variables globales, como la que WinMain
cuidadosamente el identificador de instancia que pensó que solo estaba disponible para WinMain
.
_tWinMain
es solo un acceso directo #define
en tchar.h a la versión apropiada de WinMain
.
Si se define _UNICODE
, entonces _tWinMain
expande a wWinMain
. De lo contrario, _tWinMain
es lo mismo que WinMain
.
La macro relevante se ve algo como esto (en realidad hay muchos otros códigos intercalados):
#ifdef _UNICODE
#define _tWinMain wWinMain
#else
#define _tWinMain WinMain
#endif