Freigeben über


Einstiegspunkte für exportierte DLL-Funktionen

Bei exportierten Funktionen einer DLL, verwenden Sie das korrekten-Makro, um den ordnungsgemäßen globalen Zustand beim Wechsel vom beizubehalten DLL-Modul der DLL der aufrufenden Anwendung.

Wenn sie aufgerufen wird, legt dieses Makro pModuleState, einen Zeiger auf eine AFX_MODULE_STATE-Struktur fest, die globale Daten für das Modul, wenn der effektive Modulzustand für den Rest des enthaltenen Gültigkeitsbereich der Funktion enthält. Nach dem Verlassen des Panels, das Makro enthalten, wird der vorherige effektive Modulzustand automatisch wiederhergestellt.

Diese Umschaltung wird erreicht, indem eine Instanz einer AFX_MODULE_STATE -Klasse auf dem Stapel erstellt. In seinem Konstruktor empfängt diese Klasse einen Zeiger auf den aktuellen Modulzustand und speichert ihn in der Membervariable und anschließend pModuleState als der neue effektive Modulzustand fest. In ihrem Destruktor Diese Klasse stellt den Zeiger zurück, der in der Membervariable als der effektive Modulzustand gespeichert wird.

Wenn Sie eine exportierte Funktion haben, z eine, die ein Dialogfeld in der DLL wird, müssen Sie den folgenden Code am Anfang der Funktion hinzufügen:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Dies tauscht den Modulzustand mit dem Zustand aus, der über AfxGetStaticModuleState auf das Ende des aktuellen Bereichs zurückgegeben wird.

Probleme mit Ressourcen in DLLs treten auf, wenn das Makro AFX_MANAGE_STATE nicht verwendet wird. Standardmäßig verwendet MFC wie Ressourcenhandle der Hauptanwendung, die Ressourcenvorlage zu laden. Diese Vorlage wird tatsächlich in der DLL gespeichert. Die Ursache besteht darin, dass Modulzustandsinformationen MFC nicht durch das Makro AFX_MANAGE_STATE umgeschaltet wurden. Das Ressourcenhandle wird von MFC Modulzustand wiederhergestellt. Lässt das Umschalten nicht des Modulzustandes ein falsches Ressourcenhandle verwendet werden.

AFX_MANAGE_STATE muss nicht, in jede Funktion in der DLL abgelegt werden. Beispielsweise kann InitInstance von den MFC-Code in der Anwendung ohne AFX_MANAGE_STATE, da MFC automatisch den Modulzustand vor InitInstance und dann Schaltern es zurück bewegt, nachdem InitInstance zurückkehrt. Das gilt für alle Meldungszuordnungshandler erfüllt. Reguläre DLL belegt tatsächlich eine spezielle Vorlagenfensterprozedur, die automatisch den Modulzustand umschaltet, bevor eine Meldung weiterleitet.

Siehe auch

Konzepte

Verwalten der Statusdaten von MFC-Modulen