WinMain
/wWinMain
no es el verdadero punto de entrada de Windows. Windows simplemente llama a la función especificada en el encabezado PE con cero parámetros.
Al utilizar la cadena de herramientas de Microsoft, esto es void WinMainCRTStartup() { ... }
cuando está creando una aplicación GUI y se proporciona para usted a menos que se vincule con /Zl.
El valor predeterminado WinMainCRTStartup
código creado por Visual C++ inicializa la biblioteca de tiempo de ejecución C, llama a los constructores mundiales (si lo hay) y luego llama a su función WinMain
/wWinMain
con un HINSTANCE
de GetModuleHandle(NULL)
, la línea de comandos de GetCommandLineA/W()
(sin esperar más el nombre de archivo en la línea de comando) y el comando show desde GetStartupInfo
.
La única diferencia entre WinMain
y wWinMain
es la cadena de línea de comandos y debe usar wWinMain
en aplicaciones Unicode (y todas las aplicaciones creadas actualmente deben usar Unicode). Por supuesto, puede llamar manualmente al GetCommandLineW()
en WinMain
y analizarlo usted mismo si realmente lo desea.
En Windows NT/2000/XP y posterior, la línea de comandos es una cadena Unicode internamente y WinMain
/GetCommandLineA()
le da una versión convertida de esto que podría no representar correctamente todos los caracteres. En Windows 95/98/ME es al revés, pero GetCommandLineW()
siempre puede convertir cada carácter de GetCommandLineA()
.
"Tenga en cuenta que lpCmdLine utiliza el tipo de datos LPSTR en lugar del tipo de datos LPTSTR. Esto significa que WinMain no puede ser utilizado por programas Unicode". (http://msdn.microsoft.com/en-us/library/ms633559.aspx) – Joey
Gracias Johannes por la información y por recordarme. – t0mm13b
Windows NT4 es Unicode por defecto :) –