Static vs Dynamic DLL Loading With Delphi

Et DLL (Dynamic Link Library) fungerer som et delt bibliotek med funksjoner som kan kalles av en rekke applikasjoner og andre DLL-er. Delphi lar deg opprette og bruke DLLer slik at du kan ringe disse funksjonene når du vil. Du må imidlertid importere disse rutinene før du kan ringe dem.

Funksjoner som eksporteres fra en DLL kan importeres på to måter - enten ved å erklære en ekstern prosedyre eller funksjon (statisk) eller ved direkte anrop til DLL-spesifikke API-funksjoner (dynamisk).

La oss vurdere en enkel DLL. Nedenfor er koden for "sirkel.dll" som eksporterer en funksjon, kalt "CircleArea," som beregner området til en sirkel ved å bruke den gitte radius:

Når du har cirkel.dll, kan du bruke den eksporterte "CircleArea" -funksjonen fra applikasjonen din.

Statisk lasting

Den enkleste måten å importere en prosedyre eller funksjon er å erklære den ved hjelp av det eksterne direktivet:

Hvis du inkluderer denne erklæringen i grensesnittdelen av en enhet, lastes cirkel.dll en gang når programmet starter. Under gjennomføringen av programmet er funksjonen CircleArea tilgjengelig for alle enhetene som bruker enheten der deklarasjonen ovenfor.

instagram viewer

Dynamisk lasting

Du kan få tilgang til rutiner i et bibliotek gjennom direkte anrop til Win32 API, inkludert Loadlibrary, FreeLibrary, og GetProcAddress. Disse funksjonene er deklarert i Windows.pas.

Slik ringer du CircleArea-funksjonen ved å bruke dynamisk lasting:

Når du importerer ved hjelp av dynamisk lasting, blir ikke DLL lastet inn før samtalen til LoadLibrary. Biblioteket blir losset av ring til FreeLibrary.

Med statisk lasting lastes DLL og initialiseringsdelene utføres før initialiseringsdelene til anropsapplikasjonen blir utført. Dette reverseres med dynamisk belastning.

Bør du bruke statisk eller dynamisk?

Her er en enkel titt på fordeler og ulemper ved både statisk og dynamisk DLL-innlasting:

Statisk lasting

Pros:

  • Enklere for en nybegynnerutvikler; ingen "stygg" API-samtaler.
  • DLLer lastes bare en gang når programmet starter.

Ulemper:

  • Programmet vil ikke starte hvis det mangler noen DLL-er eller ikke kan finne. En feilmelding som denne vises: "Denne applikasjonen kunne ikke starte fordi 'missing.dll' ikke ble funnet. Å installere programmet igjen kan løse dette problemet. " Ved design inkluderer DLL-søkeordren med statisk kobling katalogen som applikasjonen kommer fra lastet, systemkatalogen, Windows-katalogen og kataloger som er oppført i PATH-miljøet variabel. Legg også merke til at søkeordren kan være forskjellig for forskjellige Windows-versjoner. Forvent alltid å ha alle DLLene i katalogen der den anropende applikasjonen er.
  • Mer minne brukes siden alle DLL-er lastes inn selv om du ikke vil bruke noen av .funksjonene

Dynamisk lasting

Pros:

  • Du kan kjøre programmet selv når noen av bibliotekene det bruker ikke er til stede.
  • Mindre minneforbruk siden DLL-ene bare brukes når det er nødvendig.
  • Du kan spesifisere hele banen til DLL.
  • Kan brukes til modulbaserte applikasjoner. Programmet eksponerer kun (laster) moduler (DLLer) som er "godkjent" for brukeren.
  • Muligheten til å laste og losse bibliotek dynamisk, er grunnlaget for et plugin-system som lar en utvikler legge til ekstra funksjonalitet til programmer.
  • Bakoverkompatibilitet med eldre Windows-versjoner der system-DLLer ikke støtter de samme funksjonene eller støttes på samme måte. Å oppdage Windows-versjonen først, og deretter dynamisk koble seg basert på hva appen din kjører på, lar deg støtte mer versjoner av Windows og gir løsninger for eldre operativsystemer (eller i det minste, grasiøst deaktivere funksjoner du ikke kan Brukerstøtte.)

Ulemper:

  • Krever mer kode, noe som ikke alltid er lett for en nybegynnerutvikler.
instagram story viewer