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_DETACH

    Und 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 🙂


Anmelden zum Antworten