Gestione dei dati dello stato dei moduli MFC

Questo articolo illustra i dati sullo stato dei moduli MFC e il modo in cui questo stato viene aggiornato quando il flusso di esecuzione (il codice del percorso passa attraverso un'applicazione durante l'esecuzione) entra e lascia un modulo. Viene illustrato anche lo spostamento degli stati del modulo con le macro AFX_MANAGE_STATE e METHOD_PROLOGUE.

Nota

Il termine "modulo" qui si riferisce a un programma eseguibile o a una DLL (o a un set di DLL) che operano indipendentemente dal resto dell'applicazione, ma usa una copia condivisa della DLL MFC. Un controllo ActiveX è un esempio tipico di un modulo.

Come illustrato nella figura seguente, MFC include dati sullo stato per ogni modulo usato in un'applicazione. Esempi di questi dati includono handle di istanza di Windows (usati per il caricamento delle risorse), puntatori agli oggetti e CWinThread correnti CWinApp di un'applicazione, conteggi dei riferimenti ai moduli OLE e un'ampia gamma di mappe che mantengono le connessioni tra handle di oggetti Windows e istanze corrispondenti di oggetti MFC. Tuttavia, quando un'applicazione usa più moduli, i dati sullo stato di ogni modulo non sono a livello di applicazione. Invece, ogni modulo ha una propria copia privata dei dati sullo stato di MFC.

Diagram showing the state data of a single module.
Dati sullo stato di un modulo singolo (applicazione)

I dati di stato di un modulo sono contenuti in una struttura ed è sempre disponibile tramite un puntatore a tale struttura. Quando il flusso di esecuzione entra in un modulo specifico, come illustrato nella figura seguente, lo stato del modulo deve essere lo stato "corrente" o "effettivo". Di conseguenza, ogni oggetto thread ha un puntatore alla struttura di stato effettiva di tale applicazione. Mantenere sempre aggiornato questo puntatore è fondamentale per gestire lo stato globale dell'applicazione e mantenere l'integrità dello stato di ogni modulo. La gestione errata dello stato globale può causare un comportamento imprevedibile dell'applicazione.

State data of multiple modules.
Dati sullo stato di più moduli

In altre parole, ogni modulo è responsabile del passaggio corretto tra gli stati del modulo in tutti i punti di ingresso. Un "punto di ingresso" è qualsiasi posizione in cui il flusso di esecuzione può immettere il codice del modulo. I punti di ingresso includono:

Vedi anche

Argomenti MFC generali