Et DLL (Dynamic Link Library) fungerer som et delt bibliotek med funktioner, der kan kaldes af adskillige applikationer og andre DLL'er. Delphi lader dig oprette og bruge DLLs så du kan kalde disse funktioner efter eget ønske. Du skal imidlertid importere disse rutiner, før du kan ringe til dem.
Funktioner, der eksporteres fra en DLL, kan importeres på to måder - enten ved at erklære en ekstern procedure eller funktion (statisk) eller ved direkte opkald til DLL-specifikke API-funktioner (dynamisk).
Lad os overveje en simpel DLL. Nedenfor er koden for "cirkel.dll", der eksporterer en funktion, kaldet "CircleArea," som beregner arealet af en cirkel ved hjælp af den givne radius:
Når du har cirkel.dll, kan du bruge den eksporterede "CircleArea" -funktion fra din applikation.
Statisk indlæsning
Den enkleste måde at importere en procedure eller funktion på er at erklære den ved hjælp af det eksterne direktiv:
Hvis du inkluderer denne erklæring i en grænsefladedel af en enhed, indlæses cirkel.dll en gang, når programmet starter. Under hele udførelsen af programmet er funktionen CircleArea tilgængelig for alle enheder, der bruger enheden, hvor ovenstående deklaration er.
Dynamisk indlæsning
Du kan få adgang til rutiner i et bibliotek gennem direkte opkald til Win32 API'er, inklusive LoadLibrary, FreeLibrary, og GetProcAddress. Disse funktioner er deklareret i Windows.pas.
Sådan ringer du til CircleArea-funktionen ved hjælp af dynamisk indlæsning:
Ved import ved hjælp af dynamisk indlæsning indlæses DLL ikke før opkaldet til LoadLibrary. Biblioteket er aflæst af opkald til FreeLibrary.
Ved statisk indlæsning indlæses DLL, og dens initialiseringsafsnit udføres, før det kaldende applikations initialiseringsafsnit udføres. Dette vendes med dynamisk belastning.
Skal du bruge statisk eller dynamisk?
Her er et simpelt kig på fordele og ulemper ved både statisk og dynamisk DLL-indlæsning:
Statisk indlæsning
Fordele:
- Nemmere for en nybegynderudvikler; ingen "grim" API-opkald.
- DLLs indlæses kun én gang, når programmet starter.
Ulemper:
- Programmet starter ikke, hvis der mangler nogen DLL'er eller ikke kan findes. En fejlmeddelelse som denne vises: Denne applikation kunne ikke starte, fordi 'missing.dll' ikke blev fundet. Geninstallation af programmet kan løse dette problem ". Ved design inkluderer DLL-søgerækkefølgen med statisk link det bibliotek, som applikationen kommer fra indlæst, systemkataloget, Windows-biblioteket og mapper, der er angivet i PATH-miljøet variabel. Bemærk også, at søgerækkefølgen kan være forskellig for forskellige Windows-versioner. Forvent altid at have alle DLL'er i det bibliotek, hvor det kaldende program er.
- Mere hukommelse bruges, da alle DLL'er indlæses, selvom du ikke bruger nogle af .funktionerne
Dynamisk indlæsning
Fordele:
- Du kan køre dit program, selv når nogle af de biblioteker, det bruger, ikke er til stede.
- Mindre hukommelsesforbrug, da DLL'erne kun bruges efter behov.
- Du kan angive den fulde sti til DLL.
- Kunne bruges til modulopbyggede applikationer. Programmet afslører kun (indlæser) moduler (DLL'er) "godkendt" for brugeren.
- Muligheden for at indlæse og aflæse bibliotek dynamisk er grundlaget for et plug-in-system, der giver en udvikler mulighed for at tilføje ekstra funktionalitet til programmer.
- Baglæns kompatibilitet med ældre Windows-versioner, hvor system-DLL'er muligvis ikke understøtter de samme funktioner eller understøttes på samme måde. At registrere Windows-versionen først og derefter dynamisk sammenkæde baseret på, hvad din app kører på, giver dig mulighed for at støtte mere versioner af Windows og giver løsninger på ældre OS'er (eller i det mindste yndefuldt deaktivering af funktioner, som du ikke kan support.)
Ulemper:
- Kræver mere kode, hvilket ikke altid er let for en nybegynderudvikler.