Freigeben über


Exportierte DLL-Funktions-Einstiegspunkte

Eine exportierte Funktionen einer DLL verwenden Sie das AFX_MANAGE_STATE Makro, um den globalen Zustand beizubehalten beim Umschalten vom DLL-Modul DLL der dem aufrufenden Anwendung.

Wenn sie aufgerufen wird, wird dieses Makro pModuleState, einen Zeiger auf eine Struktur AFX_MODULE_STATE fest, die globalen Daten für das Modul, wenn der effektive Modulzustand für den Rest des enthaltenden Bereichs der Funktion.Nach dem Lassen des Bereichs, das Makro enthalten, wird der vorherige effektive Modulzustand automatisch wiederhergestellt.

Diese den Wechsel wird erreicht, indem eine Instanz einer AFX_MODULE_STATE -Klasse auf dem Stapel erstellt.In seinem Konstruktor ruft diese Klasse ein Zeiger auf den aktuellen Modulzustand und speichert ihn in einer Membervariablen und legt dann pModuleState als neue effektive Modulzustand festlegen.In ihrem Destruktor stellt diese Klasse den Zeiger wieder her, der in ihrer Membervariablen als effektive Modulzustand gespeichert wird.

Wenn Sie eine exportierte Funktion haben, z. B. eine mit einem Dialogfeld in der DLL startet, müssen Sie folgenden Code am Anfang der Funktion hinzugefügt werden:

AFX_MANAGE_STATE(AfxGetStaticModuleState( ))

Dieses lagert den Modulzustand mit dem Zustand, der von AfxGetStaticModuleState bis zum Ende des aktuellen Bereichs zurückgegeben wurde.

Probleme mit Ressourcen in DLLs treten auf, wenn das AFX_MANAGE_STATE Makro nicht verwendet wird.Standardmäßig verwendet MFC das Ressourcenhandle der Hauptanwendung, die Ressourcenvorlage zu laden.Diese Vorlage wird eigentlich in der DLL gespeichert.Der Grund liegt darin, dass Informationen Modulzustands MFC nicht über das Makro AFX_MANAGE_STATE beendet wurden.Das Ressourcenhandle wird von MFC Modulzustand wiederhergestellt.Bewirkt, dass das Umschalten des nicht Modulzustandes das falsche Ressourcenhandle vorgesehen.

AFX_MANAGE_STATE muss nicht in jede Funktion in der DLL eingefügt werden soll.Beispielsweise kann InitInstance durch den MFC-Code in der Anwendung ohne AFX_MANAGE_STATE aufgerufen werden, da MFC automatisch den Modulzustand vor InitInstance Schaltern und anschließend wieder richtet sich nach InitInstance zurückkehrt.Dies gilt auch für alle Meldungszuordnungs Klassenhandler true.Reguläre DLL verfügt tatsächlich eine besondere Vorlagen fensterprozedur, die automatisch den Modulzustand wechseln, bevor eine Nachricht weiterleitet.

Siehe auch

Konzepte

Verwalten der Statusdaten von MFC-Modulen