Regularne dll dynamicznie połączone z MFC
Regularne dynamicznie połączone z MFC biblioteki DLL jest biblioteki DLL, która MFC jest używane wewnętrznie i eksportowanych funkcji w bibliotece DLL może być wywoływana przez pliki wykonywalne MFC lub innych niż MFC.Jak opisano nazwę, tego rodzaju DLL jest zbudowana przy użyciu wersji biblioteki MFC (znany również jako wersję udostępnionego MFC).Funkcje zazwyczaj są eksportowane z regularnych biblioteki DLL przy użyciu standardowych interfejsów C.
Należy dodać AFX_MANAGE_STATE makro na początku eksportowanych funkcji w regularnych biblioteki DLL, które dynamicznie połączyć MFC, aby ustawić bieżący stan modułu dla 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( ))
Regularne biblioteki DLL, dynamicznie połączone z MFC ma następujące funkcje:
Jest to nowy typ biblioteki DLL, wprowadzone przez program Visual C++ 4.0.
Wykonywalny klienta mogą być pisane w dowolnym języku, który obsługuje korzystanie z bibliotek DLL (C, C++, Pascal, Visual Basic i tak dalej); nie ma być Aplikacja MFC.
W przeciwieństwie do statycznie DLL regularnych tego typu DLL dynamicznie połączone z MFC DLL (znany również jako udostępnionego DLL MFC).
Importuj MFC biblioteki, połączone z tego typu DLL jest sam jedną dla biblioteki DLL rozszerzenia lub aplikacji przy użyciu biblioteki MFC DLL: lib MFCxx (D).
Regularne biblioteki DLL, dynamicznie połączone z MFC ma następujące wymagania:
Te biblioteki DLL są opracowywane z _AFXDLL zdefiniowane, podobnie jak plik wykonywalny, który dynamicznie połączone z biblioteki MFC DLL.Ale _USRDLL jest również zdefiniowane, podobnie jak regularne biblioteki DLL, połączoną statycznie MFC.
Trzeba utworzyć wystąpienie tego typu DLL CWinApp-klasy.
Tego rodzaju zastosowań DLL DllMain dostarczonych przez MFC.Umieścić wszystkie biblioteki DLL inicjowania kodu w InitInstance Członkowskich kod funkcji i zakończenie w ExitInstance jak w normalnych aplikacji MFC.
Ponieważ wersja biblioteki MFC DLL tego rodzaju, należy jawnie ustawić bieżący stan modułu na jeden dla biblioteki DLL.Aby to zrobić, użyj AFX_MANAGE_STATE makro na początku każdej funkcji wywożonych z biblioteki DLL.
Regularne biblioteki DLL muszą mieć CWinApp-uzyskane klasy i pojedynczy obiekt tej klasy aplikacji, jak aplikacja MFC.Jednakże CWinApp obiektu biblioteki DLL nie jest pompa główne wiadomości, podobnie jak CWinApp obiektu aplikacji.
Należy zauważyć, że CWinApp::Run mechanizmu nie stosuje się do biblioteki DLL, ponieważ aplikacja jest właścicielem pompy główne wiadomości.Jeśli biblioteki DLL wywołuje niemodalny okna dialogowe lub okno główne ramki własnej, pompa wiadomości głównym aplikacji musi wywołać rutynowych wyeksportowane biblioteki DLL, który wywołuje CWinApp::PreTranslateMessage.
Umieścić wszystkie inicjalizacji specyficznej dla biblioteki DLL w CWinApp::InitInstance Członkowskich funkcji, jak w normalnych aplikacji MFC.CWinApp::ExitInstance Członkowskich funkcji użytkownika CWinApp klasy pochodnej jest wywoływana z MFC, pod warunkiem DllMain działać zanim biblioteka DLL jest zwalniana.
Udostępnione biblioteki DLL MFCx0.dll i Msvcr*0.dll (lub podobnych plików) musi być rozpowszechniany z aplikacji.
Biblioteki DLL, która dynamicznie połączone z MFC również statycznie nie można połączyć się z MFC.Aplikacje łącze do biblioteki DLL regularnych dynamicznie połączone z MFC on podobnie jak inne biblioteki DLL.
Symbole eksportowane są zazwyczaj z regularnych biblioteki DLL przy użyciu standardowych interfejsów C.Deklarację funkcji wyeksportowanej z biblioteki DLL regularnych wyglądać tak:
extern "C" __declspec(dllexport) MyExportedFunction( );
Wszystkie alokacje pamięci w ramach regularnych DLL powinno pozostać w bibliotece DLL; Biblioteka DLL należy przekazać do lub nie otrzymują od wywołującego pliku wykonywalnego, dowolną z następujących:
wskaźniki do obiektów MFC
wskaźniki do pamięci przydzielonej przez MFC
Jeśli trzeba wykonać jedną z powyższych lub przekazać uzyskane MFC obiektów między wywołującego pliku wykonywalnego i biblioteki DLL, należy zbudować rozszerzenie DLL.
Bezpiecznie przekazać wskaźniki do pamięci, które zostały przydzielone przez biblioteki uruchomieniowej c między aplikacją i biblioteki DLL tylko wtedy, gdy sporządzić kopię danych.Nie musisz usunąć lub zmienić rozmiar tych wskaźników lub z nich korzystać bez kopii pamięci.
Podczas budowania regularnych biblioteki DLL, która dynamicznie łącza do biblioteki MFC, należy użyć makra AFX_MANAGE_STATE do przełączania stanu modułu MFC poprawnie.Można to zrobić, dodając następujący wiersz kodu na początku funkcji wyeksportowanych z biblioteki DLL:
AFX_MANAGE_STATE(AfxGetStaticModuleState( ))
AFX_MANAGE_STATE makro nie stosuje się w regularnych biblioteki DLL, które statycznie połączyć MFC lub bibliotek DLL rozszerzeń.Aby uzyskać więcej informacji, zobacz Zarządzanie Państwa danych z MFC modułów.
Przykładem sposobu zapisu, budowania i używania DLL regularnych, zobacz próbki DLLScreenCap.Więcej informacji o regularnych biblioteki DLL, które dynamicznie połączyć MFC zobacz sekcję, zatytułowany "Konwertowanie DLLScreenCap do dynamicznego łącza z bibliotece MFC DLL" abstract próbki.