windows - Forskel mellem WinMain, main og DllMain i C ++

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad er forskellen mellem de tre funktioner og hvornår skal de bruges?

Bedste reference


WinMain bruges til en ansøgning (ending .exe) for at indikere processen starter. Det vil give kommandolinjeparametre for processen og tjener som brugerkodeindtastningspunktet for en proces. WinMain (eller en anden version af main) er også en nødvendig funktion. Operativsystemet har brug for en funktion til at ringe for at starte en proces, der kører.


DllMain bruges til en DLL til at betyde mange forskellige scenarier. Det vil især blive kaldt hvornår



  1. DLL'en er indlæst i processen: DLL\_PROCESS\_ATTACH

  2. DLL'en er losset fra processen: DLL\_PROCESS\_DETACH

  3. Der startes en tråd i processen: DLL\_THREAD\_ATTACH

  4. En tråd er afsluttet i processen: DLL\_THREAD\_DETACH



DllMain er en valgfri konstruktion og har mange implicitte kontrakter forbundet med det. For eksempel bør du ikke kalde kode, der vil tvinge en anden DLL til at indlæse. Generelt er det ret vanskeligt at få det rigtige og bør undgås, medmindre du har et meget specifikt behov for det.

Andre referencer 1


main () betyder, at dit program er en konsol-applikation. [1]


WinMain () betyder, at programmet er et GUI-program - det vil sige, det viser vinduer og dialogbokse i stedet for at vise konsol. [2]


DllMain () betyder, at programmet er en DLL. En DLL kan ikke køres direkte, men bruges af ovenstående to slags applikationer. [3]


Derfor:



  • Brug WinMain, når du skriver et program, der skal vise vinduer mv.

  • Brug DLLMain, når du skriver en DLL.

  • Brug hoved i alle andre tilfælde.


Andre referencer 2


[[Addendum til dit spørgsmål]]


Glem også DllEntryPoint:



  • Når indlæsningstiden er involveret, er indgangspunktet DllMain.

    (Ex. COM i process-server DLL).

  • Når der køres tid, er indgangspunktet DllEntryPoint.

    (Ex. LoadLibrary bliver kaldt).