windows - Hvordan opretter jeg en DLL-initialiseringsrutine?

Indlæg af Hanne Mølgaard Plasc

Problem



I DllMain Entry Point-dokumentationen giver forfatteren følgende kommentar: [2]



  For at give mere kompleks initialisering skal du oprette en initialiseringsrutine for DLL'en. Du kan kræve, at applikationer kalder initialiseringsrutinen, før du ringer til andre rutiner i DLL'en.



I C/C ++, hvordan opretter jeg en anden rutine og kræver, at programmet skal kalde det før nogen anden?

Bedste reference


Initialiseringsrutinen kan være en hvilken som helst eksporteret funktion. Tricket er 'kræver andre applikationer at kalde det'. For at håndhæve det skal du kontrollere, om det var blevet kaldt i stort set hver anden udført funktion. Hvis hver eksporteret funktion har en fælles kode, ville det være et godt sted at kontrollere, om initialiseringsfunktionen var blevet kaldt. [3]


Hvis du dog skal tjekke om det er blevet kaldt i hvert enkelt indgangspunkt, kan det være lettere for forbrugerne af DLL'en, hvis du faktisk kalder denne funktion automatisk, hvis den ikke er blevet kaldt. Det kræver noget ekstra arbejde for at gøre det tråd sikkert sikkert. Du ville have brug for en kritisk sektion (eller mutex, semafor osv.) For at sikre, at det kun blev kaldt en gang.

Andre referencer 1


Det kanoniske eksempel på dette er InitCommonControlsEx(). Du skal gøre brugerne af DLL'en til at ringe til initialiserings- og afslutningsrutinerne på samme måde. [4]

Andre referencer 2


Her er et eksempel:


http://zone.ni.com/devzone/cda/tut/p/id/4877[5]