Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En vanlig MFC DLL statiskt länkad till MFC är en DLL som använder MFC internt, och de exporterade funktionerna i DLL kan anropas av antingen MFC eller icke-MFC körbara filer. Som namnet beskriver skapas den här typen av DLL med hjälp av den statiska länkbiblioteksversionen av MFC. Funktioner exporteras vanligtvis från en vanlig MFC DLL med hjälp av standard-C-gränssnittet. Ett exempel på hur du skriver, skapar och använder en vanlig MFC-DLL finns i exempel-DLLScreenCap.
Observera att termen USRDLL inte längre används i Visual C++-dokumentationen. En vanlig MFC DLL som är statiskt kopplad till MFC har samma egenskaper som den tidigare USRDLL.
En vanlig MFC DLL, statiskt länkad till MFC, har följande funktioner:
Den körbara klienten kan skrivas på valfritt språk som stöder användning av DLL:er (C, C++, Pascal, Visual Basic och så vidare); det behöver inte vara ett MFC-program.
DLL:en kan länka till samma MFC statiska länkbibliotek som används av program. Det finns inte längre en separat version av statiska länkbibliotek för DLL:er.
Före version 4.0 av MFC tillhandahöll USRDLLs samma typ av funktioner som vanliga MFC DLL:er statiskt kopplade till MFC. Från och med Visual C++ version 4.0 är termen USRDLL föråldrad.
En vanlig MFC DLL, statiskt kopplad till MFC, har följande krav:
Den här typen av DLL måste instansiera en klass som härletts från
CWinApp.Den här typen av DLL använder den
DllMainsom tillhandahålls av MFC. Placera all DLL-specifik initieringskod iInitInstancemedlemsfunktionen och avslutningskoden iExitInstancesom i en vanlig MFC-applikation.Även om termen USRDLL är föråldrad måste du fortfarande definiera "_USRDLL" på kommandoraden för kompilatorn. Den här definitionen avgör vilka deklarationer som hämtas från MFC-huvudfilerna.
vanliga MFC-DLL:er måste ha en CWinApp-härledd klass och ett enda objekt i den programklassen, liksom ett MFC-program. Objektet för CWinApp DLL:en har dock ingen huvudmeddelandepump, liksom objektet för CWinApp ett program.
Observera att mekanismen CWinApp::Run inte gäller för en DLL eftersom programmet äger huvudmeddelandepumpen. Om DLL:en öppnar lägeslösa dialogrutor eller har ett eget huvudramfönster måste programmets huvudmeddelandepump anropa en rutin som exporteras av DLL:en, som i sin tur anropar CWinApp::PreTranslateMessage memberfunktionen i DLL:ens programobjekt.
Ett exempel på den här funktionen finns i exemplet DLLScreenCap.
Symboler exporteras vanligtvis från en vanlig MFC DLL med hjälp av standard-C-gränssnittet. Deklarationen av en funktion som exporteras från en vanlig MFC DLL skulle se ut ungefär så här:
extern "C" __declspec(dllexport) MyExportedFunction( );
Alla minnesallokeringar inom en vanlig MFC-DLL bör ligga inom DLL-filen. DLL-filen bör inte skickas till eller ta emot från den körbara anroparen något av följande:
Pekare till MFC-objekt
Pekare för minne som allokerats av MFC
Om du behöver göra något av ovanstående eller behöver skicka MFC-härledda objekt mellan den körbara anropsversionen och DLL:en måste du skapa en MFC-tilläggs-DLL.
Det är säkert att skicka pekare till minne som allokerats av C-körningsbiblioteken mellan ett program och en DLL endast om du gör en kopia av data. Du får inte ta bort eller ändra storlek på dessa pekare eller använda dem utan att göra en kopia av minnet.
En DLL som är statiskt länkad till MFC kan inte också dynamiskt länka till delade MFC-DLL:er. En DLL som är statiskt länkad till MFC är dynamiskt bunden till ett program precis som andra DLL-filer. program länkar till den precis som andra DLL-filer.
Standardbiblioteken för statiskA MFC-länkar namnges enligt konventionen som beskrivs i Namngivningskonventioner för MFC-DLL:er. Men med MFC version 3.0 och senare behöver du inte längre manuellt ange den version av MFC-biblioteket som du vill länka till länkaren. I stället avgör MFC-huvudfilerna automatiskt rätt version av MFC-biblioteket som ska länkas in baserat på förprocessordefinierade, till exempel _DEBUG eller _UNICODE. MFC-huvudfilerna lägger till /DEFAULTLIB-direktiv som instruerar länkaren att länka i en specifik version av MFC-biblioteket.