Punkty wejścia wyeksportowanej funkcji DLL
Dla eksportowanych funkcji z biblioteki DLL, użyj AFX_MANAGE_STATE makro w celu utrzymania właściwego stanu globalnego podczas przełączania z modułu DLL do biblioteki DLL aplikacji wywołującej.
Po wywołaniu to makro ustawia pModuleState, wskaźnik do AFX_MODULE_STATE struktury zawierające globalnych danych dla modułu, jak stan modułu skuteczne na pozostały zakres zawierający funkcji.Po opuszczeniu zakres zawierający makro, poprzedni stan modułu skuteczne automatycznie po przywróceniu.
To przełączanie uzyskuje się poprzez utworzenie instancji AFX_MODULE_STATE klasy na stosie.W jego konstruktora tej klasy uzyskuje wskaźnik do bieżącego stanu modułu i zapisuje ją w zmiennej Państwa, a następnie ustawia pModuleState jako nowy stan modułu skuteczne.W jego destruktora tej klasy przywraca wskaźnik przechowywane w jego zmienną jako stan modułu skuteczne.
Jeśli masz wyeksportowanej funkcji, który uruchamia okno dialogowe w bibliotece DLL należy dodać poniższy kod na początek funkcji:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
To zamienia bieżący stan modułu z Państwem zwrócony z AfxGetStaticModuleState do końca bieżącego zakresu.
Problemy z zasobami w bibliotekach DLL wystąpi, jeśli AFX_MANAGE_STATE makro nie jest używany.Domyślnie MFC używa uchwytu zasobów dla głównej aplikacji do załadowania zasobu szablonu.Ten szablon jest faktycznie przechowywane w bibliotece DLL.Przyczyną jest, że informacje o stanie modułu MFC nie został przełączony przez AFX_MANAGE_STATE makro.Uchwyt zasobów jest odbierana od stanu modułu MFC.Nie przełączenie stanu modułu powoduje uchwyt źle zasobów ma być używany.
AFX_MANAGE_STATEnie musi znajdować się w każdej funkcji w bibliotece DLL.Na przykład InitInstance może być wywoływana przez kod MFC w aplikacji bez AFX_MANAGE_STATE ponieważ MFC automatycznie przełącza stan modułu przed InitInstance i następnie przełączniki go z powrotem po InitInstance zwraca.To samo dotyczy dla wszystkich osób zajmujących się mapę wiadomość.Regularne bibliotek DLL faktycznie mają specjalne okno główne procedury, która automatycznie przełącza stan modułu przed przesłaniem wiadomości.