Question

Quelle est la différence entre les trois fonctions et quand les utiliser ??

Était-ce utile?

La solution

WinMain est utilisé pour une application (terminant .exe) pour indiquer que le processus est en train de démarrer. Il fournira des arguments de ligne de commande pour le processus et servira de point d’entrée de code utilisateur pour un processus. WinMain (ou une version différente de main) est également une fonction requise. Le système d’exploitation a besoin d’une fonction à appeler pour démarrer un processus en cours d’exécution.

DllMain est utilisé pour une DLL pour signifier beaucoup de scénarios différents. Plus particulièrement, il sera appelé lorsque

  1. La DLL est chargée dans le processus: DLL_PROCESS_ATTACH
  2. La DLL est déchargée du processus: DLL_PROCESS_DETACH
  3. Un thread est démarré dans le processus: DLL_THREAD_ATTACH
  4. Un fil est terminé dans le processus: DLL_THREAD_DETACH

DllMain est une construction facultative à laquelle sont associés de nombreux contrats implicites. Par exemple, vous ne devriez pas appeler de code qui forcerait le chargement d'une autre DLL. En général, c’est une fonction assez difficile à maîtriser et qu’il faut éviter sauf si vous en avez un besoin très spécifique.

Autres conseils

main () signifie que votre programme est une application console .

WinMain () signifie que le programme est une application d'interface graphique - - c’est-à-dire qu’il affiche des fenêtres et des boîtes de dialogue au lieu d’afficher la console.

DllMain () signifie que le programme est une DLL . . Une DLL ne peut pas être exécutée directement, mais est utilisée par les deux types d’application ci-dessus.

Par conséquent:

  • Utilisez WinMain lorsque vous écrivez un programme qui va afficher des fenêtres, etc.
  • Utilisez DLLMain lorsque vous écrivez une DLL.
  • Utilisez main dans tous les autres cas.

[Addendum à votre question]

N'oubliez pas non plus le DllEntryPoint:

  • Lorsque le temps de chargement est impliqué, le point d'entrée est DllMain.
    (Ex. DLL de serveur COM in-process).

  • Lorsque le temps d'exécution est impliqué, le point d'entrée est DllEntryPoint.
    (Ex. LoadLibrary est appelé).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top