Správa údajů o stavu modulů knihovny MFC
Tento článek popisuje stavová data modulů MFC a způsob aktualizace tohoto stavu při spuštění (kód cesty prochází aplikací při provádění) a opustí modul. Probereme také přepínání stavů modulů s AFX_MANAGE_STATE a METHOD_PROLOGUE makry.
Poznámka
Pojem "modul" zde odkazuje na spustitelný program nebo na knihovnu DLL (nebo sadu knihoven DLL), která funguje nezávisle na zbytku aplikace, ale používá sdílenou kopii knihovny MFC DLL. Typickým příkladem modulu je ovládací prvek technologie ActiveX.
Jak je znázorněno na následujícím obrázku, mfc obsahuje stavová data pro každý modul použitý v aplikaci. Mezi příklady těchto dat patří obslužné rutiny instancí systému Windows (používané pro načítání prostředků), ukazatele na aktuální CWinApp
a CWinThread
objekty aplikace, počty odkazů modulu OLE a různé mapy, které udržují propojení mezi popisovači objektů Systému Windows a odpovídajícími instancemi objektů MFC. Pokud ale aplikace používá více modulů, stavová data jednotlivých modulů nejsou široká. Každý modul má vlastní privátní kopii dat stavu MFC.
Stavová data jednoho modulu (aplikace)
Stavová data modulu jsou obsažena ve struktuře a jsou vždy k dispozici prostřednictvím ukazatele na tuto strukturu. Když tok provádění zadá určitý modul, jak je znázorněno na následujícím obrázku, stav tohoto modulu musí být "aktuální" nebo "efektivní". Každý objekt vlákna má proto ukazatel na efektivní stavovou strukturu této aplikace. Udržování tohoto ukazatele neustále aktualizovaného je nezbytné ke správě globálního stavu aplikace a zachování integrity stavu jednotlivých modulů. Nesprávná správa globálního stavu může vést k nepředvídatelným chování aplikace.
Stavová data více modulů
Jinými slovy, každý modul zodpovídá za správné přepínání mezi stavy modulů na všech svých vstupních bodech. Vstupní bod je libovolné místo, kde tok provádění může zadat kód modulu. Vstupní body zahrnují: