Een Dynamic Link Library of DLL , kan een aanvraag tot alleen het noodzakelijke minimum uitvoerbare code in het geheugen geladen tijdens runtime . Wanneer het programma vraagt een functie in een DLL-bestand , het besturingssysteem laadt de DLL in het geheugen volgens de specificaties van de programmeur . Zolang het lopende programma is een DLL -functie , die DLL hoeft geen ruimte innemen niet verwijzen . Dit bespaart veel middelen en verhoogt run - time performance . Als de bibliotheek statisch waren , zouden alle van de bibliotheek code worden toegevoegd aan het hoofdprogramma 's uitvoerbare code en de reus programma zou moeten blijven in het geheugen voor de gehele looptijd . De Unix- of Linux -versie van een Windows DLL is een gedeelde bibliotheek , dat gebouwd is met de extensie " . Zo . " Windows , Unix en Linux hebben specifieke conventies om functies in DLL of gedeelde bibliotheken. Export Windows DLL Objecten behulp dllexport Keyword Om een functie , klasse , data-element of klasse lid functie toegankelijk voor het bellen naar Windows- programma te maken , moet u deze eerst te exporteren . Een klasse of functie kan gedurende de definitie met het trefwoord " __declspec ( dllexport ) " worden uitgevoerd alvorens de functie , klasse of naam van de variabele , als volgt : Void __ declspec ( dllexport ) MijnKlasse : openbare CObjectName { ..... } In de header file DLL , zet dit zoekwoord voordat de functienaam in een prototype verklaring . Het trefwoord " __declspec ( dllexport ) " slaat de functienamen in de DLL 's export tafel. Om de ruimte die deze tabel inneemt bezuinigen , gebruiken rangtelwoorden plaats van functienamen . Export Windows DLL Objecten Door Module Definition Files Als alternatief voor het zoekwoord " __declspec ( dllexport ) , " maak een module definitie bestand dat de naam van de bibliotheek staat , optionele beschrijving en bevat de namen van de functies , klassen en data variabelen in de DLL samen met optionele ordinale waarden . De ordinale waarde van een functie varieert van 1 tot N , waarbij N het aantal functies in de DLL . De module definitie bestand heeft de extensie Hieronder volgt een voorbeeld van een module definitie bestand , of een DEF -bestand ' DEF . '. : . BIBLIOTHEEK ReportWriterDESCRIPTION Deze dynamische bibliotheek bevat het rapport generator functionaliteit van MyProduct.RPT_setup @ 1RPT_design @ 2RPT_run @ 3RPT_print @ 4 Als u een Microsoft Foundation Class DLL met behulp van Visual Studio 's AppWizard te creëren , zal de wizard een skelet . DEF -bestand voor de DLL te genereren en toe te voegen aan het project . Vermeldingen toevoegen voor DLL- functies in deze . DEF -bestand om ze te exporteren. Het formaat van de functie prototype door de aanroepende programma moet de vorm van de functie vermeldingen in het . DEF bestand. Ofwel gebruik maken van eenvoudige definities in beide plaatsen , of compiler - specifieke , compiler - gegenereerde definities in beide plaatsen consequent . Import en Export Extension DLL Microsoft Foundation Class extensie DLL bestaat typisch uit herbruikbare klassen afgeleid van bestaande MFC types klasse . Ze zijn gebouwd met behulp van een DLL -versie van MFC , en kan worden opgeroepen vanuit toepassingen en DLL's gebouwd met behulp van deze gedeelde versie van MFC . Om lessen in extensie DLL's exporteren , gebruikt u de macro " AFX_EXT_CLASS " vóór de naam van de klasse als volgt: Klasse AFX_EXT_CLASS CMyViewClass : openbare CView { //Klasse body }; Als u gebruik maakt van een DEF -bestand , voeg de volgende macro code aan het begin . en het einde van de verlengde DLL header file : # undef AFX_DATA # define AFX_DATA AFX_EXT_DATA // # undef AFX_DATA # define AFX_DATA Deze preprocessorinstructies ervoor zorgen dat de MFC variabelen en afleidingen en geëxporteerd van het uitgebreide DLL . importeren DLL functies de andere kant van de exporterende objecten van DLL's is het importeren van hen in toepassingen met behulp van de " __declspec ( dllimport ) "keyword . Export C Functies voor gebruik in C of C + + Executables Als het oproepende programma of functie is geschreven in C + + , gebruik de" extern C " preprocessor richtlijn in de DLL header Hier is een voorbeeld ://MyDLLFunctions.h # ifdef __ cplusplusExtern " C " { # endif__declspec ( dllimport ) nietig MyFunc01 ( ) als de DLL functies in C. zijn geschreven ; __declspec ( dllimport ) leegte MyFunc02 ( ) ; # ifdef __ cplusplus } //end beugels voor " extern C " -richtlijn # endif Als alternatief voor de " extern C " richtlijn specificeren binnen het DLL header , kunt u de header -bestand DLL omvatten met een " Extern " C " " wrapper voorwaardelijk , als volgt : # ifdef __ cplusplusExtern " C " { # endif # include " DllPath \\ MyDLLFunctions.h " # ifdef __ cplusplus } //end beugels voor " extern C " -richtlijn # endif
|