Udostępnij za pośrednictwem


Punkty wejścia wyeksportowanej funkcji DLL

W przypadku wyeksportowanych funkcji biblioteki DLL użyj makra AFX_MANAGE_STATE , aby zachować odpowiedni stan globalny podczas przełączania z modułu DLL do biblioteki DLL wywołującej.

Po wywołaniu to makro ustawia pModuleStatewskaźnik na strukturę zawierającą AFX_MODULE_STATE dane globalne dla modułu jako skuteczny stan modułu dla pozostałej części zawierającego zakres funkcji. Po opuszczeniu zakresu zawierającego makro zostanie automatycznie przywrócony poprzedni stan efektywnego modułu.

To przełączanie jest osiągane przez utworzenie wystąpienia AFX_MODULE_STATE klasy na stosie. W konstruktorze ta klasa uzyskuje wskaźnik do bieżącego stanu modułu i przechowuje go w zmiennej składowej, a następnie ustawia pModuleState jako nowy skuteczny stan modułu. W destruktorze ta klasa przywraca wskaźnik przechowywany w zmiennej składowej jako skuteczny stan modułu.

Jeśli masz wyeksportowaną funkcję, taką jak ta, która uruchamia okno dialogowe w bibliotece DLL, musisz dodać następujący kod na początku funkcji:

AFX_MANAGE_STATE(AfxGetStaticModuleState())

Spowoduje to zamianę bieżącego stanu modułu ze stanem zwróconym z elementu AfxGetStaticModuleState do końca bieżącego zakresu.

Jeśli makro nie zostanie użyte, wystąpią AFX_MANAGE_STATE problemy z zasobami w bibliotekach DLL. Domyślnie MFC używa dojścia zasobów głównej aplikacji do załadowania szablonu zasobu. Ten szablon jest rzeczywiście przechowywany w dll. Główną przyczyną jest to, że informacje o stanie modułu AFX_MANAGE_STATE MFC nie zostały przełączone przez makro. Dojście zasobów jest odzyskiwane ze stanu modułu MFC. Nie przełączaj stanu modułu powoduje użycie nieprawidłowego dojścia zasobu.

AFX_MANAGE_STATE nie musi być umieszczana w każdej funkcji w bibliotece DLL. Na przykład InitInstance może być wywoływany przez kod MFC w aplikacji bez AFX_MANAGE_STATE , ponieważ MFC automatycznie przesuwa stan modułu przed InitInstance , a następnie przełącza go z powrotem po InitInstance powrocie. To samo dotyczy wszystkich programów obsługi mapy komunikatów. Zwykłe biblioteki DLL MFC mają specjalną procedurę okna głównego, która automatycznie przełącza stan modułu przed routingiem dowolnego komunikatu.

Zobacz też

Zarządzanie danymi stanu modułów MFC