Udostępnij za pośrednictwem


Zwykłe biblioteki DLL MFC połączone statycznie z MFC

Zwykła biblioteka MFC DLL statycznie połączona z MFC jest biblioteką DLL, która używa biblioteki MFC wewnętrznie, a wyeksportowane funkcje w dll mogą być wywoływane przez pliki wykonywalne MFC lub inne niż MFC. Jak opisano w nazwie, ten rodzaj biblioteki DLL jest kompilowany przy użyciu statycznej wersji biblioteki linków MFC. Funkcje są zwykle eksportowane ze standardowej biblioteki MFC DLL przy użyciu standardowego interfejsu języka C. Aby zapoznać się z przykładem sposobu pisania, kompilowania i używania regularnej biblioteki MFC DLL, zobacz przykładową bibliotekę DLLScreenCap.

Należy pamiętać, że termin USRDLL nie jest już używany w dokumentacji języka Visual C++. Zwykła biblioteka MFC DLL, która jest statycznie połączona z MFC, ma takie same cechy jak poprzedni USRDLL.

Zwykła biblioteka MFC DLL, statycznie połączona z MFC, ma następujące funkcje:

  • Plik wykonywalny klienta można napisać w dowolnym języku, który obsługuje używanie bibliotek DLL (C, C++, Pascal, Visual Basic itd.); nie musi być aplikacją MFC.

  • Biblioteka DLL może łączyć się z tymi samymi bibliotekami linków statycznych MFC używanymi przez aplikacje. Nie ma już oddzielnej wersji bibliotek linków statycznych dla bibliotek DLL.

  • Przed wersją 4.0 MFC biblioteki USRDLLs dostarczyły tego samego typu funkcjonalności co zwykłe biblioteki MFC DLL statycznie połączone z MFC. Od wersji 4.0 języka Visual C++ termin USRDLL jest przestarzały.

Zwykła biblioteka MFC DLL, statycznie połączona z MFC, ma następujące wymagania:

  • Ten typ biblioteki DLL musi utworzyć wystąpienie klasy pochodzącej z CWinAppklasy .

  • Ten typ biblioteki DLL używa elementu dostarczonego DllMain przez MFC. Umieść cały kod inicjowania specyficznego InitInstance dla biblioteki DLL w funkcji składowej i kod zakończenia, tak jak w ExitInstance normalnej aplikacji MFC.

  • Mimo że termin USRDLL jest przestarzały, nadal należy zdefiniować "_USRDLL" w wierszu polecenia kompilatora. Ta definicja określa, które deklaracje są pobierane z plików nagłówków MFC.

Zwykłe biblioteki DLL MFC muszą mieć klasę pochodną CWinAppi pojedynczy obiekt tej klasy aplikacji, podobnie jak aplikacja MFC. CWinApp Jednak obiekt biblioteki DLL nie ma głównej pompy komunikatów, podobnie jak CWinApp obiekt aplikacji.

Należy pamiętać, że CWinApp::Run mechanizm nie ma zastosowania do biblioteki DLL, ponieważ aplikacja jest właścicielem głównej pompy komunikatów. Jeśli biblioteka DLL otwiera moderowane okna dialogowe lub ma własne główne okno ramki, główna pompa komunikatów aplikacji musi wywołać procedurę wyeksportowaną przez bibliotekę DLL, która z kolei wywołuje CWinApp::PreTranslateMessage funkcję składową obiektu aplikacji biblioteki DLL.

Aby zapoznać się z przykładem tej funkcji, zobacz przykład DLLScreenCap.

Symbole są zwykle eksportowane ze standardowej biblioteki MFC DLL przy użyciu standardowego interfejsu języka C. Deklaracja funkcji wyeksportowanej z regularnej biblioteki MFC DLL będzie wyglądać mniej więcej tak:

extern "C" __declspec(dllexport) MyExportedFunction( );

Wszystkie alokacje pamięci w ramach regularnej biblioteki MFC DLL powinny pozostać w obrębie biblioteki DLL; biblioteka DLL nie powinna przekazywać ani odbierać z wywołującego pliku wykonywalnego dowolnego z następujących elementów:

  • Wskaźniki do obiektów MFC

  • Wskaźniki do pamięci przydzielonej przez MFC

Jeśli musisz wykonać dowolną z powyższych czynności lub musisz przekazać obiekty pochodne MFC między wywołującym plikiem wykonywalnym a biblioteką DLL, musisz utworzyć bibliotekę DLL rozszerzenia MFC.

Można bezpiecznie przekazać wskaźniki do pamięci przydzielonej przez biblioteki czasu wykonywania języka C między aplikacją a biblioteką DLL tylko wtedy, gdy zostanie utworzona kopia danych. Nie można usuwać ani zmieniać rozmiaru tych wskaźników ani używać ich bez tworzenia kopii pamięci.

Biblioteka DLL, która jest statycznie połączona z MFC, nie może również dynamicznie łączyć się z udostępnionymi bibliotekami DLL MFC. Biblioteka DLL, która jest statycznie połączona z MFC, jest dynamicznie powiązana z aplikacją tak samo jak każda inna biblioteka DLL; aplikacje łączą się z nią tak samo jak każda inna biblioteka DLL.

Standardowe biblioteki linków statycznych MFC są nazwane zgodnie z konwencją opisaną w sekcji Konwencje nazewnictwa bibliotek DLL MFC. Jednak w przypadku biblioteki MFC w wersji 3.0 lub nowszej nie trzeba już ręcznie określać konsolidatora wersji biblioteki MFC, w której chcesz się połączyć. Zamiast tego pliki nagłówków MFC automatycznie określają poprawną wersję biblioteki MFC do łączenia w oparciu o definicje preprocesora, takie jak _DEBUG lub _UNICODE. Pliki nagłówkowe MFC dodają dyrektywy /DEFAULTLIB, nakazując konsolidatorowi połączenie w określonej wersji biblioteki MFC.

Co chcesz zrobić?

Co chcesz dowiedzieć się więcej?

Zobacz też

Rodzaje bibliotek DLL