Rodzaje bibliotek DLL
Ten temat zapewnia informacje pomocne w określeniu rodzaju DLL do kompilacji.
Różne rodzaje dostępnych bibliotek DLL
Korzystając z Visual C++, możesz kompilować DLL Win32 w C lub C++, które nie używają biblioteki Microsoft Foundation Class (MFC).Możesz utworzyć projekt DLL bez MFC za pomocą kreatora aplikacji Win32.
Sama biblioteka MFC jest dostępna, w bibliotekach łącza statycznego lub w szeregu bibliotek DLL, przy użyciu kreatora MFC DLL.Jeśli biblioteka DLL wykorzystuje MFC, Visual C++ obsługuje trzy różne scenariusze rozwoju biblioteki DLL:
Kompilowanie regularnej biblioteki DLL, która statycznie łączy się z MFC
Kompilowanie regularnej biblioteki DLL, która dynamicznie łączy się z MFC
Kompilowanie rozszerzenia MFC biblioteki DLL, która zawsze dynamiczne łączy biblioteki MFC
O czym chcesz się dowiedzieć więcej?
Którego rodzaju DLL użyć
Decydowanie którego rodzaju biblioteki DLL użyć
Jeśli biblioteka DLL nie używa MFC, należy użyć Visual C++ do kompilacji biblioteki innej niż MFC Win32 DLL.Łączenie MFC do biblioteki DLL (statycznie lub dynamicznie) zajmuje znaczną ilość miejsca na dysku i pamięci.Nie należy dodawać łączy do MFC, chyba że Twój DLL faktycznie korzysta z MFC.
Jeśli biblioteka DLL będzie używać MFC i będzie wykorzystywana przez aplikacje MFC lub inne niż MFC, użytkownik musi skompilować regularną bibliotekę DLL, która łączy dynamicznie do MFC albo regularną bibliotekę DLL, która statycznie łączy się z MFC.W większości przypadków należy użyć regularnej biblioteki DLL, która dynamicznie łączy z MFC, ponieważ rozmiar pliku biblioteki DLL będzie znacznie mniejszy i oszczędności pamięci wynikające z wykorzystania udostępnionej wersja MFC mogą być znaczne.Jeśli połączysz się statycznie z MFC, rozmiar pliku biblioteki DLL będzie większy i potencjalnie zajmie dodatkową pamięć, ponieważ ładuje własną prywatną kopię kodu biblioteki MFC.
Kompilowanie biblioteki DLL, która łączy dynamicznie MFC jest szybsza niż kompilowanie biblioteki DLL, która statycznie łączy się MFC, ponieważ samo łąćzneie z MFC nie jest konieczne.Jest to szczególnie istotne w debugowanych kompilacjach, gdzie konsolidator musi zmniejszyć informację debugowania.Poprzez łączenie się z biblioteką DLL, która już zawiera informacje o debugowaniu, jest mniej informacji debugowania do kompaktowania w bibliotece DLL.
Jedną z wad połączenia dynamicznego do MFC jest konieczność rozłożenia udostępnionych bibliotek DLL Mfcx0.dll i Msvcrxx.dll (lub podobnych plików) z biblioteką DLL.Biblioteki MFC DLL można dowolnie rozprowadzać, ale trzeba mimo to zainstalować biblioteki DLL w programie instalatora.Ponadto, należy dostarczyć plik Msvcrxx.dll, który zawiera bibliotekę uruchomieniową C, która jest używany zarówno przez program jak i same biblioteki MFC DLL.
Jeśli biblioteka DLL będzie używana tylko przez pliki wykonywalne MFC, można dokonać wyboru między kompilacją regularnej biblioteki DLL lub rozszerzonej biblioteki DLL.Jeśli biblioteka DLL implementuje klasy wielokrotnego użytku pochodzące z istniejących klas MFC lub należy przekazać obiekty pochodzące z MFC między aplikacją i biblioteką DLL, należy utworzyć rozszerzoną bibliotekę DLL.
Jeśli biblioteka DLL dynamicznie łączy do biblioteki MFC, biblioteki MFC DLL mogą być rozdystrybuowane z biblioteką DLL.Ta architektura jest szczególnie pomocna przy udostępnianiu biblioteki klas wielu plikom wykonawczym, aby oszczędzić przestrzeń na dysku i zminimalizować użycie pamięci.
Przed wersją 4.0, program Visual C++ obsługiwał tylko dwa rodzaje biblioteki DLL, które używały MFC: USRDLL i AFXDLL.Regularne biblioteki DLL statycznie połączone z MFC mają takie same charakterystyki jak dawny USRDLL.Biblioteki rozszerzone DLL MFC mają takie same charakterystyki jak dawne biblioteki AFXDLL.