wm_paint lpszclassname first example create app c++ windows winapi unicode

c++ - lpszclassname - Diferencia entre WinMain y WWinMain



windows h example (3)

La única diferencia es que Winmain toma char * para el parámetro lpCmdLine, mientras que wWinMain toma wchar_t *.

En Windows XP, si una entrada de la aplicación es WinMain, ¿Windows convierte la línea de comandos de Unicode a Ansi y la pasa a la aplicación?

Si el parámetro de la línea de comando debe estar en Unicode (por ejemplo, el nombre del archivo Unicode, la conversión hará que falten algunos caracteres), ¿eso significa que debo usar wWinMain como la función de entrada?


En Windows XP, si una entrada de la aplicación es WinMain, ¿Windows convierte la línea de comandos de Unicode a Ansi y la pasa a la aplicación?

Sí.

Si el parámetro de la línea de comando debe estar en Unicode (por ejemplo, el nombre del archivo Unicode, la conversión hará que falten algunos caracteres), ¿eso significa que debo usar wWinMain como la función de entrada?

Sí, deberías, si quieres manejar correctamente los argumentos Unicode a tu programa.

La documentación para WinMain () en MSDN también está de acuerdo.

Sin embargo, también puede usar GetCommandLineW para recuperar la línea de comandos específicamente en Unicode.


¡Windows XP hacia arriba es unicode por defecto! Y por lo tanto, no se requiere conversión. El cargador de C ++ Runtime se encarga de que el argumento pase a la aplicación. La API estándar de Win32 dicta que la entrada principal es WinMain (...).


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.

Cuando se utiliza la cadena de herramientas de Microsoft, se void WinMainCRTStartup() { ... } cuando esté creando una aplicación GUI y se le proporcionará a menos que enlace con /Zl .

El código predeterminado WinMainCRTStartup creado por Visual C ++ inicializa la biblioteca en tiempo de ejecución de C, llama a los constructores globales (si los hay) y luego llama a su función WinMain / wWinMain con un HINSTANCE de GetModuleHandle(NULL) , la línea de GetCommandLineA/W() de GetCommandLineA/W() ( omitiendo el nombre de archivo en la línea de comandos) y el comando show de GetStartupInfo .

La única diferencia entre WinMain y wWinMain es la cadena de línea de comandos y debe usar wWinMain en las aplicaciones Unicode (y todas las aplicaciones creadas en estos días deben usar Unicode). Por supuesto, puede llamar manualmente a GetCommandLineW() en WinMain y analizarlo usted mismo si realmente lo desea.

En Windows NT / 2000 / XP y versiones posteriores, la línea de comandos es una cadena Unicode internamente y WinMain / GetCommandLineA() le ofrece una versión convertida de esta que tal vez no pueda representar cada uno de los caracteres correctamente. En Windows GetCommandLineW() / ME es al revés, pero GetCommandLineW() siempre puede convertir todos los caracteres de GetCommandLineA() .