Państwa modułu DLL regularnych dynamicznie połączone z MFC
Możliwość dynamiczne łącze regularnych DLL biblioteki MFC DLL umożliwia niektóre konfiguracje, które są bardzo skomplikowane.Na przykład regularne DLL i plik wykonywalny, który korzysta z niego można zarówno dynamiczne łącze do biblioteki MFC DLL i biblioteki DLL rozszerzenia.
Konfiguracja ta stwarza problemy w odniesieniu do danych globalnych MFC, takie jak wskaźnik do bieżącego CWinApp mapy obiektu i uchwyt.
Przed MFC w wersji 4.0 globalne dane znajdowały się w bibliotece MFC DLL sam i został udostępniony przez wszystkie moduły w procesie.Ponieważ każdy proces, za pomocą biblioteki DLL systemu Win32 otrzymuje własną kopię danych biblioteki DLL, ten schemat pod warunkiem łatwym sposobem śledzenia danych na proces.Ponadto ponieważ AFXDLL model założyć, że byłoby tylko jeden CWinApp mapy procesu obsługi obiektu i tylko jeden zbiór, tych elementów może być śledzone w MFC DLL, sam.
Umożliwia dynamiczne łącze regularnych DLL biblioteki MFC DLL, jest obecnie możliwe ma dwa lub więcej, ale CWinApp obiektów w procesie — i również dwa lub więcej zestawów uchwyt mapy.Jak MFC zachować o które z nich należy używać?
Roztwór jest przyznanie każdy moduł (aplikacji lub regularnych DLL) własną kopię tej informacji stanu globalnego.Dlatego wywołanie AfxGetApp w regularnych DLL zwraca wskaźnik do CWinApp obiektu z biblioteki DLL nie jeden w pliku wykonywalnego.Ta kopia-module danych globalnych MFC jest nazywany stanem modułu i jest opisany w 58 Uwaga Tech MFC.
Wspólnej procedury okna MFC automatycznie przełącza się do Państwa właściwego moduł, więc nie trzeba martwić w jakichkolwiek obsługi wiadomości w bibliotece DLL regularnych.Jednak gdy wywołuje plik wykonywalny do regularnych DLL, trzeba ustawić bieżący stan modułu dla biblioteki DLL.Aby to zrobić, użyj AFX_MANAGE_STATE makro w każdej funkcji wywożonych z biblioteki DLL.Można to zrobić, dodając następujący wiersz kodu na początku funkcji wyeksportowanych z biblioteki DLL:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))