Hur får man en funktionsprototyp i DLL

February 13

Hur får man en funktionsprototyp i DLL


En dynamisk länk bibliotek, eller DLL möjliggör en applikation för att ladda endast absolut nödvändigt körbar kod i minnet vid körning. Närhelst programmet anropar en funktion i en DLL, laddar operativsystemet DLL i minnet i enlighet med programmerarens specifikationer. Så länge pågående program inte refererar en DLL funktion behöver DLL inte upptar utrymme. Detta sparar resurser och ökar körningsprestanda. Om biblioteket var statisk, skulle alla bibliotekskoden fogas till huvudprogrammet körbara kod, och den gigantiska programmet skulle behöva stanna i minnet för hela körningen. Unix eller Linux-versionen av Windows DLL är ett delat objekt bibliotek som är byggd med tillägget SO. Windows, Unix och Linux har särskilda konventioner att få tillgång till funktioner i DLL eller delade bibliotek.

Instruktioner

Export Windows DLL objekt med Preprocessor Nyckelord

1 I din DLL sidhuvudfilen lade sökordet "__declspec (dllexport)" innan prototypen för en funktion, klass, klassmedlem eller datavariabel i DLL. Detta sökord lägger funktionen prototyp till DLL export bord.

2 Använd ordning värden 1 till N i stället för funktions eller klass medlemmars namn för att spara utrymme som DLL export bord, där N är antalet objekt eller funktioner i DLL.

3 Lägg till sökordet "__declspec (dllimport)" innan motsvarande funktionsprototyper i det anropande programmet eller DLL. Det anropande programmet importerar funktioner som DLL export.

Export Windows DLL funktioner Använda en modul Definition fil

4 Skapa en textfil med tillägget DEF och lägga till den i projektet för DLL i Visual Studio.

5 Tillsätt "bibliotek" uttalande med namnet på DLL efter det på följande sätt:

BIBLIOTEK Report

6 Eventuellt lägga till en kort en rad beskrivning av DLL enligt följande:

BESKRIVNING Detta är en DLL för rapportgenerering funktionalitet i MyProduct.

Detta rekommenderas.

7 Lägg till en post för varje funktion eller klassmedlem som DLL vill exportera, med ett valfritt kardinal nummer. Kardinalen nummer representerar funktionen och tar värden från 1 till N, där N är antalet funktioner som exporteras av DLL. Här är ett exempel:

RPT_init @ 1
RPT_design @ 2
RPT_run @ 3
RPT_print @ 4

När du har länkat allt källa och detta DEF fil, skapar kompilatorn en exportfilen med EXP förlängning och en importbiblioteksfilen, med LIB förlängning. Kompilatorn använder EXP filen för att skapa DLL. LIB fil är kopplad till det anropande programmet och håller import information om funktionerna i DLL.

Tips

  • Om du vill ringa C-funktioner i en DLL från antingen en C eller C ++ program, kapsla in de exporterade funktionsprototyper i "extern C {....}" preprocessor direktiv enligt följande:
  • #ifdef __cplusplus
  • extern "C" {
  • #endif
  • __declspec (dllimport) void RPT_init (RPT * rapport);
  • __declspec (dllimport) BOOL RPT_design (RPT * rapport);
  • __declspec (dllimport) BOOL RPT_run (RPT * rapport);
  • __declspec (dllimport) BOOL RPT_print (RPT * rapport);
  • #ifdef __cplusplus
  • } // Ändfästet av "extern C" preprocessor direktiv
  • #endif
  • När en DLL är gjord av klasser som härrör från Microsoft Foundation Classes i DLL form är nya DLL kallas en MFC förlängning DLL. Använd makrot "AFX_EXT_CLASS" till export- och import prototyper av klasser i MFC utökade DLL.
  • Till port 16-bitars Windows-program till 32-bitars Windows, ersätta sökordet "_export" och "_import" med "__declspec (dllexport)" och "__declspec (dllimport)" respektive.

        

Välkommen till dig för att skicka en kommentar:

            
            
            
            

© 2021 Astrixsoft.com | Contact us: webmaster# astrixsoft.com