Statische versus dynamische Dynamic Link bibliotheek laden

Een DLL (Dynamic Link Library) fungeert als een gedeelde bibliotheek met functies die door tal van toepassingen en andere DLL's kunnen worden gebruikt. Met Delphi kunt u DLL's maken en gebruiken, zodat u deze functies naar believen kunt aanroepen. U moet deze routines echter importeren voordat u ze kunt aanroepen.

Uit een DLL geëxporteerde functies kunnen op twee manieren worden geïmporteerd - door een externe procedure of functie (statisch) aan te geven of door directe oproepen naar DLL-specifieke API-functies (dynamisch).

Laten we een eenvoudige DLL overwegen. Hieronder staat de code voor "circle.dll" die een functie exporteert, "CircleArea" genaamd, die het gebied van een cirkel berekent met de gegeven straal:

Zodra u de cirkel.dll hebt, kunt u de geëxporteerde "CircleArea" -functie vanuit uw toepassing gebruiken.

Statische belasting

De eenvoudigste manier om een ​​procedure of functie te importeren, is deze aan te geven met behulp van de externe richtlijn:

Als u deze verklaring opneemt in het interface-gedeelte van een eenheid, wordt circle.dll een keer geladen wanneer het programma wordt gestart. Tijdens de uitvoering van het programma is de functie CircleArea beschikbaar voor alle eenheden die de eenheid gebruiken waar de bovenstaande verklaring zich bevindt.

Dynamisch laden

U hebt toegang tot routines in een bibliotheek via directe oproepen naar Win32 API's, waaronder LoadLibrary, FreeLibrary, en GetProcAddress. Deze functies worden gedeclareerd in Windows.pas.

Zo roept u de CircleArea-functie op met behulp van dynamisch laden:

Wanneer u importeert met behulp van dynamisch laden, wordt de DLL niet geladen tot de aanroep van LoadLibrary. De bibliotheek wordt verwijderd door de aanroep naar FreeLibrary.

Bij statisch laden wordt de DLL geladen en worden de initialisatiesecties uitgevoerd voordat de initialisatiesecties van de aanroepende toepassing worden uitgevoerd. Dit wordt omgekeerd bij dynamisch laden.

Moet u statisch of dynamisch gebruiken?

Hier is een eenvoudige blik op de voor- en nadelen van zowel statisch als dynamisch DLL-laden:

Statische belasting

Voors:

  • Gemakkelijker voor een beginnende ontwikkelaar; geen "lelijke" API-aanroepen.
  • DLL's worden slechts één keer geladen, wanneer het programma start.

nadelen: