Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das dynamische Verknüpfen einer regulären MFC-DLL mit der MFC-DLL ermöglicht bestimmte Konfigurationen, die sehr kompliziert sind. Beispielsweise können eine reguläre MFC-DLL und die ausführbare Datei, die diese verwendet, dynamisch mit der MFC-DLL und mit allen MFC-Erweiterungs-DLLs verknüpft werden.
Diese Konfiguration stellt ein Problem im Hinblick auf die globalen MFC-Daten dar, z. B. für den Zeiger auf das aktuelle CWinApp-Objekt und die Handlezuordnungen.
Vor MFC-Version 4.0 befanden sich diese globalen Daten in der MFC-DLL selbst und wurden von allen Modulen im Prozess gemeinsam verwendet. Da jeder Prozess, der eine Win32-DLL verwendet, eine eigene Kopie der DLL-Daten erhält, bietet dieses Schema eine einfache Möglichkeit, prozessbezogene Daten nachzuverfolgen. Da das AFXDLL-Modell davon ausgegangen ist, dass es nur ein CWinApp-Objekt und nur eine Reihe von Handlezuordnungen im Prozess gibt, können diese Elemente in der MFC-DLL selbst nachverfolgt werden.
Mit der Option, eine reguläre MFC-DLL dynamisch mit der MFC-DLL zu verknüpfen, ist es jetzt jedoch möglich, dass ein Prozess zwei oder mehr CWinApp-Objekte und zwei oder mehr Reihen von Handlezuordnungen enthält. Wie wird in MFC nachverfolgt, welche davon verwendet werden sollen?
Dazu muss jedes Modul (Anwendung oder reguläre MFC-DLL) eine eigene Kopie dieser globalen Zustandsinformationen erhalten. Folglich gibt ein Aufruf von AfxGetApp in der regulären MFC-DLL einen Zeiger auf das CWinApp-Objekt in der DLL zurück, nicht auf das in der ausführbaren Datei. Diese modulbezogene Kopie der globalen MFC-Daten wird als Modulzustand bezeichnet und in TN058: Implementierung des MFC-Modulzustands beschrieben.
Die allgemeine MFC-Fensterprozedur wechselt automatisch in den richtigen Modulzustand, sodass Sie sich keine Gedanken über die in der regulären MFC-DLL implementierten Nachrichtenhandler machen müssen. Wenn Ihre ausführbare Datei jedoch die reguläre MFC-DLL aufruft, müssen Sie den aktuellen Modulzustand explizit auf den der DLL festlegen. Verwenden Sie dazu das Makro AFX_MANAGE_STATE in jeder Funktion, die aus der DLL exportiert wird. Dies erfolgt, indem die folgende Codezeile am Beginn der Funktionen hinzugefügt wird, die aus der DLL exportiert werden:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))