c++ windows entry-point winmain

Diferencia entre WinMain, main y DllMain en C++



windows entry-point (2)

¿Cuál es la diferencia entre las tres funciones y cuándo usarlas?


WinMain se usa para una aplicación (finalizando .exe) para indicar que el proceso está comenzando. Proporcionará argumentos de línea de comando para el proceso y sirve como el punto de entrada de código de usuario para un proceso. WinMain (o una versión diferente de main) también es una función requerida. El SO necesita una función para llamar y comenzar un proceso en ejecución.

DllMain se usa para una DLL para representar muchos escenarios diferentes. En particular, se llamará cuando

  1. La DLL se carga en el proceso: DLL_PROCESS_ATTACH
  2. La DLL se descarga del proceso: DLL_PROCESS_DETACH
  3. Se inicia un hilo en el proceso: DLL_THREAD_ATTACH
  4. Un hilo se finaliza en el proceso: DLL_THREAD_DETACH

DllMain es una construcción opcional y tiene muchos contratos implícitos asociados. Por ejemplo, no debería estar llamando al código que forzará la carga de otra DLL. En general, es una función bastante difícil hacer las cosas bien y debe evitarse a menos que tenga una necesidad muy específica.


main () significa que su programa es una aplicación de consola .

WinMain () significa que el programa es una aplicación GUI , es decir, muestra ventanas y cuadros de diálogo en lugar de mostrar la consola.

DllMain () significa que el programa es una DLL . Un archivo DLL no se puede ejecutar directamente, pero lo utilizan los dos tipos de aplicaciones anteriores.

Por lo tanto:

  • Use WinMain cuando está escribiendo un programa que va a mostrar ventanas, etc.
  • Use DLLMain cuando escribe una DLL.
  • Use main en todos los demás casos.