En dynamisk link library , eller DLL , giver en ansøgning til at indlæse kun det nødvendige minimum eksekverbar kode i hukommelsen under kørslen . Når programmet kalder en funktion i en DLL, operativsystemet indlæser DLL i hukommelsen i overensstemmelse med programmør specifikationer. Så længe det igangværende program ikke referere til en DLL -funktion, der DLL behøver ikke optager plads. Det sparer en masse ressourcer og øger run-time performance. Hvis biblioteket var statiske , ville alle af biblioteket koden vedlægges vigtigste programmets eksekverbare kode og den gigantiske program ville have at bo i hukommelsen for hele køretid . Unix eller Linux version af en Windows DLL er et delt bibliotek , bygget i overensstemmelse hermed med endelsen " . Det. " Windows , Unix og Linux har specifikke konventioner få adgang til funktioner i DLL eller delte biblioteker. Eksport Windows DLL Objects Brug dllexport Keyword
For at lave en funktion , klasse, dataelement eller klasse medlemsfunktion tilgængelig for kalder Windows-program , skal du eksportere den først. En klasse eller funktion må eksporteres i løbet af sin definition bruge søgeordet " __declspec ( dllexport ) " før funktionen , klasse eller variabel navn, følger som : Hej
Void __ declspec ( dllexport ) MinKlasse : offentlig CObjectName { ..... }
DLL header fil , sætte dette søgeord, før funktionen navn i en prototype erklæring. Nøgleordet " __declspec ( dllexport )" gemmer funktionen navne i DLL eksport bord. At spare den plads, denne tabel indtager bruge ordenstal i stedet for navne på funktioner .
Eksport Windows DLL genstande gennem Modul Definition Files
Som et alternativ til søgeordet " __declspec ( dllexport ) , "at skabe et modul definition fil, som hedder biblioteket navn, valgfri beskrivelse og indeholder navnene på funktioner , klasser og data variabler i DLL sammen med valgfri ordenstal værdier. Ordenstal værdi af en funktion i området fra 1 til N, hvor N er antallet af funktioner i DLL . Modulet definition fil har udvidelsen Følgende er et eksempel på et modul definition fil eller en DEF -fil " DEF . ". : .
LIBRARY ReportWriterDESCRIPTION Denne dynamiske bibliotek indeholder rapporten generator funktionalitet MyProduct.RPT_setup @ 1RPT_design @ 2RPT_run @ 3RPT_print @ 4 fotos p Hvis du opretter en Microsoft Foundation Class DLL ved hjælp af Visual Studio AppWizard , vil guiden generere et skelet. DEF fil til DLL og føje den til projektet. Tilføj poster for DLL funktioner i dette. DEF fil at eksportere dem. Formatet af funktionen prototype anvendes af det kaldende program skal matche formatet af funktionen poster i . DEF fil. Enten bruge enkle definitioner begge steder eller compiler -specifikke, compiler - genererede definitioner i begge steder konsekvent.
Import og eksport Extension DLL'er
En Microsoft Foundation Class udvidelse DLL består typisk af genanvendelige klasser stammer fra eksisterende MFC klasse typer . De er bygget ved hjælp af en DLL version af MFC , og kan kaldes fra applikationer og DLL-filer er bygget ved hjælp af denne delte version af MFC . Sådan eksporterer klasser i forlængelse DLL'er , kan du bruge makro " AFX_EXT_CLASS " før klassen navn som dette : Klasse AFX_EXT_CLASS CMyViewClass : public CView { //Klasse krop }; Hvis du bruger en DEF -fil , skal du tilføje følgende makrokode i begyndelsen. og slutningen af den forlængede DLL header fil: # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA //
# undef AFX_DATA # define AFX_DATA
Disse præprocessortilvalg direktiver sørge for, at MFC variabler og afledninger og eksporteres fra den udvidede DLL .
import DLL funktioner
den anden side af eksport objekter fra DLL importerer dem til applikationer ved hjælp af " __declspec ( dllimport ) " søgeord.
Export C Funktioner til brug i C eller C + + Eksekverbare
p Hvis det kaldende program eller funktion er skrevet i C + +, bruge" extern C " præprocessor direktiv i DLL header hvis DLL funktioner skrevet i C.
Her er et eksempel ://MyDLLFunctions.h # ifdef __ cplusplusExtern "C" {# endif__declspec ( dllimport ) void MyFunc01 (); __declspec ( dllimport ) void MyFunc02 (); # ifdef __ cplusplus } //endebeslag for " extern C "-direktiv # endif
Som et alternativ til angivelse af " extern C " direktivet inden for den DLL header , kan du medtage DLL header fil med en " Extern " C " " wrapper betinget , som følger : Hej
# ifdef __ cplusplusExtern "C" {# endif
# include " DLLPATH \\ MyDLLFunctions.h "
# ifdef __ cplusplus } //slut beslag til " extern C " direktivet # endif