Pregunta

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

¿Fue útil?

Solución

WinMain se usa para una aplicación (finalizando .exe) para indicar que el proceso se está iniciando. Proporcionará argumentos de línea de comando para el proceso y sirve como 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 sistema operativo necesita una función para llamar para iniciar un proceso en ejecución.

DllMain se usa para una DLL para significar 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 termina en el proceso: DLL_THREAD_DETACH

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

Otros consejos

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

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

DllMain () significa que el programa es un DLL . Una DLL no se puede ejecutar directamente, pero es utilizada por los dos tipos de aplicaciones anteriores.

Por lo tanto:

  • Utilice WinMain cuando escriba un programa que muestre ventanas, etc.
  • Use DLLMain cuando escriba una DLL.
  • Use main en todos los demás casos.

[Anexo a su pregunta]

Además, no olvide el DllEntryPoint:

  • Cuando el tiempo de carga está involucrado, el punto de entrada es DllMain.
    (Ej. DLL de servidor en proceso COM).

  • Cuando el tiempo de ejecución está involucrado, el punto de entrada es DllEntryPoint.
    (Ej. Se llama a LoadLibrary).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top