Hvordan få en funksjon Prototype i DLL

Hvordan få en funksjon Prototype i DLL


En biblioteket for dynamiske koblinger, eller DLL gjør et program for å laste kun det nødvendige minimum kjørbar kode i minnet under kjøring. Når programmet kaller en funksjon i en DLL, laster operativsystemet DLL-filen i minnet i samsvar med programmererens spesifikasjoner. Så lenge kjører programmet ikke referere til en DLL-funksjonen, trenger DLL ikke opptar plass. Dette sparer ressurser og øker runtime ytelse. Hvis biblioteket var statiske, ville alle bibliotekkoden legges til hovedprogrammet er kjørbar kode, og den gigantiske programmet ville ha å bo i minnet for hele runtime. Unix eller Linux-versjon av en Windows DLL er en felles objektbibliotek som er bygget med utvidelsen SO. Windows, Unix og Linux har spesifikke konvensjoner for å få tilgang til funksjoner i DLL-filer eller delte biblioteker.

Bruksanvisning

Export Windows DLL objekter ved hjelp Preprocessor Søkeord

1 I din DLL header fil, sette søkeordet "__declspec (dllexport)" før prototypen på en funksjon, klasse, klassemedlem eller datavariabel i DLL. Dette nøkkelordet legger funksjonen prototype til DLL eksport bord.

2 Bruk ordens verdiene 1 til N i stedet for funksjons eller klasse medlemsnavnene for å spare plass okkupert av DLL eksport bord, der N er antall objekter eller funksjoner i DLL.

3 Legg søkeordet "__declspec (DllImport)" før de tilsvarende funksjonsprototypene i å kalle programmet eller DLL. Kalle programmet importerer funksjonene som DLL eksport.

Export Windows DLL funksjoner Bruke en modul Definition File

4 Lag en tekstfil med filtypen DEF og legge den til prosjektet for DLL i Visual Studio.

5 Legg til "bibliotek" statement med navnet på DLL etter det som følger:

LIBRARY Report

6 Eventuelt legge til en kort en linje beskrivelse av DLL som følger:

BESKRIVELSE Dette er en DLL for rapportgenerering funksjonalitet i MyProduct.

Dette er anbefalt.

7 Legg til en oppføring for hver funksjon eller klassemedlem at DLL ønsker å eksportere, med en valgfri kardinaltall. Kardinalen tallet representerer funksjon og tar verdier fra 1 til N, der N er antall funksjoner eksporteres av DLL. Her er et eksempel:

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

Etter å knytte all kildekode og dette DEF fil, oppretter kompilatoren en eksportfil med EXP forlengelse og en import bibliotekfilen, med LIB forlengelse. Kompilatoren bruker EXP fil for å lage DLL. Den LIB filen er knyttet til å kalle programmet og holder import informasjon om funksjonene i DLL.

Hint

  • Å kalle C-funksjoner i en DLL fra enten en C eller C ++ program, kapsle de eksporterte funksjonen prototyper i "extern C {....}" preprosessor direktivet som følger:
  • # ifdef __cplusplus
  • extern "C" {
  • #slutt om
  • __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
  • } // End brakett av "extern C" preprosessor direktivet
  • #slutt om
  • Når en DLL er laget av klasser som stammer fra Microsoft Foundation Classes i DLL form, er den nye DLL kalt en MFC forlengelse DLL. Bruk makro "AFX_EXT_CLASS" for å eksportere og importere prototyper av klasser i MFC utvidede DLLs.
  • Å port 16-bits Windows-programmer til 32-bits Windows, erstatte søkeordet "_export" og "_import" med "__declspec (dllexport)" og "__declspec (DllImport)" hhv.