Udostępnij za pośrednictwem


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

Regularne statycznie połączony MFC biblioteki DLL jest biblioteką DLL, który MFC jest używane wewnętrznie, a eksportowanych funkcji w bibliotece DLL może być wywoływana przez pliki wykonywalne MFC lub biblioteki MFC.Jak nazwa opisuje, tego rodzaju DLL został zbudowany przy użyciu statycznych łączy wersja biblioteki MFC.Funkcje zazwyczaj są eksportowane z regularnych biblioteki DLL za pomocą standardowego interfejsu C.Na przykład sposobu zapisu, tworzenia i stosowania regularnych DLL Zobacz próbki DLLScreenCap.

Należy zauważyć, że pojęcie USRDLL nie jest już używany w dokumentacji programu Visual C++.Regularne biblioteki DLL, która jest łączony statycznie MFC ma takie same charakterystyki jak były USRDLL.

Regularne DLL, statycznie połączony MFC, posiada następujące cechy:

  • Pliku wykonywalnego klienta mogą być napisane w dowolnym języku, które obsługuje korzystanie z bibliotek DLL (C, C++, Pascal, Visual Basic i tak dalej); nie ma być aplikacji MFC.

  • Biblioteka DLL można połączyć samej biblioteki łącz statycznych MFC używane przez aplikacje.Nie ma już oddzielną wersję łącz statycznych bibliotek DLL.

  • Przed wersją 4.0 MFC USRDLLs pod warunkiem tego samego rodzaju funkcje jak regularne bibliotek DLL statycznie połączony MFC.Visual C++ w wersji 4.0, termin USRDLL jest przestarzała.

Regularne DLL, statycznie połączony MFC, ma następujące wymagania:

  • Tego rodzaju DLL trzeba utworzyć wystąpienie klasy pochodzącej od CWinApp.

  • Tego rodzaju zastosowań DLL DllMain dostarczonych przez MFC.Wszelkie specyficzne dla biblioteki DLL inicjowania kod w InitInstance kod funkcji i zakończenie element członkowski w ExitInstance jak w normalnych aplikacji MFC.

  • Nawet jeśli termin USRDLL jest przestarzały, nadal należy zdefiniować "_USRDLL" w wierszu polecenia kompilatora.Definicja ta określa przyjęcia zgłoszeń jest ściągnięta z plików nagłówkowych MFC.

Regularne bibliotek DLL musi mieć CWinApp-pochodnych klasy i pojedynczy obiekt tej klasy aplikacji, podobnie jak aplikacji MFC.Jednakże CWinApp obiekt biblioteki DLL nie ma pompy głównej wiadomości, podobnie jak CWinApp obiektu aplikacji.

Należy zauważyć, że CWinApp::Run mechanizm nie ma zastosowania do biblioteki DLL, ponieważ aplikacja jest właścicielem pompy głównej wiadomości.Jeśli biblioteka DLL otwiera Niemodalne okna dialogowe lub okno ramkę główną własnych, pompy głównej wiadomości aplikacji należy wywołać rutynowych wywożonych przez biblioteki DLL, która z kolei wywołuje CWinApp::PreTranslateMessage funkcji składowej obiektu aplikacji biblioteki DLL.

Na przykład tej funkcji Zobacz próbki DLLScreenCap.

Symbole eksportowane są zwykle z regularnych biblioteki DLL za pomocą standardowego interfejsu C.Deklarację funkcji wyeksportowanej z biblioteki DLL regularnych mogłoby wyglądać mniej więcej tak:

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

Alokacja pamięci w ramach regularnych DLL powinny pozostać w bibliotece DLL; DLL nie powinny przekazać do lub otrzymują od wywołującego pliku wykonywalnego dowolną z następujących czynności:

  • Wskaźniki do obiektów MFC

  • Wskaźniki do pamięci przydzielonej przez MFC

Jeśli potrzebujesz do wykonaj dowolne z powyższych lub trzeba przekazać uzyskane MFC obiektów między wywołującego pliku wykonywalnego i biblioteki DLL, należy utworzyć biblioteki DLL rozszerzenia.

Jest to bezpieczne przekazywać wskaźniki do pamięci, które zostały przydzielone przez biblioteki run-time C między aplikacją i biblioteki DLL tylko wtedy, gdy wykonanie kopii danych.Nie musisz usunąć lub zmienić rozmiar te wskaźniki lub z nich korzystać bez tworzenia kopii pamięci.

Statycznie połączonego z biblioteki MFC DLL również dynamicznie nie można połączyć z udostępnionej biblioteki MFC DLL.Statycznie połączonego z biblioteki MFC DLL dynamicznie powiązany jest aplikacja, podobnie jak inne biblioteki DLL; aplikacje, łączyć się go tak jak każdej biblioteki DLL.

Biblioteki standardowej łącz statycznych MFC są nazywane zgodnie z Konwencją opisane w Konwencje nazewnictwa dla biblioteki MFC DLL.Jednakże MFC wersja 3.0 i nowsze, nie jest już konieczne ręcznie określić do linker wersja biblioteki MFC, które mają być połączone w.Zamiast tego pliki nagłówkowe MFC automatycznie określić poprawną wersję biblioteki MFC do łączenia w oparciu o preprocesora definiuje, takich jak _DEBUG lub _UNICODE.Pliki nagłówków MFC dodać dyrektyw /DEFAULTLIB polecająca linker mają być połączone z określoną wersją biblioteki MFC.

Co chcesz zrobić?

O czym chcesz się dowiedzieć więcej?

Zobacz też

Koncepcje

Rodzaje bibliotek DLL