Verwalten der Statusdaten von MFC-Modulen

In diesem Artikel werden die Statusdaten von MFC-Modulen und die Aktualisierung dieses Zustands erläutert, wenn der Ausführungsfluss (der Pfadcode durch eine Anwendung beim Ausführen) in ein Modul wechselt und verlässt. Das Wechseln von Modulzuständen mit den AFX_MANAGE_STATE und METHOD_PROLOGUE Makros wird ebenfalls erläutert.

Hinweis

Der Begriff "Modul" bezieht sich hier auf ein ausführbares Programm oder auf eine DLL (oder einen Satz von DLLs), die unabhängig von der restlichen Anwendung arbeiten, aber eine freigegebene Kopie der MFC-DLL verwendet. Ein ActiveX-Steuerelement ist ein typisches Beispiel für ein Modul.

Wie in der folgenden Abbildung dargestellt, enthält MFC Zustandsdaten für jedes Modul, das in einer Anwendung verwendet wird. Beispiele für diese Daten sind Windows-Instanzhandles (zum Laden von Ressourcen verwendet), Zeiger auf die aktuellen CWinApp und CWinThread Objekte einer Anwendung, OLE-Modulverweisanzahlen und eine Vielzahl von Zuordnungen, die die Verbindungen zwischen Windows-Objekthandles und entsprechenden Instanzen von MFC-Objekten Standard enthalten. Wenn eine Anwendung jedoch mehrere Module verwendet, sind die Statusdaten jedes Moduls nicht anwendungsweit. Vielmehr verfügt jedes Modul über eine eigene private Kopie der Zustandsdaten des MFC.

Diagram showing the state data of a single module.
Zustandsdaten eines Einzelmoduls (Anwendung)

Die Zustandsdaten eines Moduls sind in einer Struktur enthalten und stehen immer über einen Zeiger auf diese Struktur zur Verfügung. Wenn der Ausführungsfluss ein bestimmtes Modul eingibt, wie in der folgenden Abbildung dargestellt, muss der Status dieses Moduls der Status "current" oder "effective" sein. Daher weist jedes Threadobjekt einen Zeiger auf die effektive Zustandsstruktur dieser Anwendung auf. Es ist wichtig, diesen Zeiger jederzeit auf dem neuesten Stand zu halten, um den globalen Zustand der Anwendung zu verwalten und Standard die Integrität des Zustands jedes Moduls zu bewahren. Falsche Verwaltung des globalen Zustands kann zu unvorhersehbaren Anwendungsverhalten führen.

State data of multiple modules.
Zustandsdaten mehrerer Module

Mit anderen Worten: Jedes Modul ist für den ordnungsgemäßen Wechsel zwischen Modulzuständen an allen Einstiegspunkten verantwortlich. Ein "Einstiegspunkt" ist jeder Ort, an dem der Ausführungsfluss den Code des Moduls eingeben kann. Einstiegspunkte sind:

Siehe auch

Allgemeine MFC-Themen