Weshalb gibt es innerhalb von DDLs mehrfachaufrufe von Funktionen?
-
Ich habe eine DLL deren DllMain wie folgt aussieht:
int APIENTRY DllMain (HINSTANCE hinst, DWORD fdwReason, PVOID pvReserved) { switch (fdwReason) { //Die DLL wird in den Adressraum des prozesses eingeblendet case DLL_PROCESS_ATTACH: //Initialisierung Singleton::getInstance().setHinst (hinst); break; } Frame window; App app; //Fenster initialisieren window.init (); //App starten app.setup (); //Nachrichtenschleife starten window.run (); //App beenden app.remove (); return TRUE; }
Misteriöserweise wird die Funktion window.init() und app.setup() mehrfach aufgerufen, was zu unschönen Fehlern führt. Ich habe die Funktionen nun mit nem Flag vor mehrfachaufrufen geschützt, aber interressieren würde es mich trotzdem.
-
Ist ja wohl klar warum das passiert.
Es gibt 4 Reasons warum DllMain aufgerufen wird.
DLL_PROCESS_ATTACH
DLL_THREAD_ATTACH
DLL_THREAD_DETACH
DLL_PROCESS_DETACHUnd du führst bei jedem den gleichen Code aus.
Du solltest den wahrscheinlich nur ausführen wenn der Grund DLL_PROCESS_ATTACH ist. Du machst es aber bei allen...
-
Ok danke