lpszclassname first create app c++ windows winapi winmain

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