Eine DLL (Dynamic Link Library) fungiert als gemeinsam genutzte Bibliothek von Funktionen, auf die zahlreiche Anwendungen und andere DLLs zugreifen können. In Delphi können Sie DLLs erstellen und verwenden, damit Sie diese Funktionen nach Belieben aufrufen können. Sie müssen diese Routinen jedoch importieren, bevor Sie sie aufrufen können.
Aus einer DLL exportierte Funktionen können auf zwei Arten importiert werden: entweder durch Deklaration einer externen Prozedur oder Funktion (statisch) oder durch direkten Aufruf DLL-spezifischer API-Funktionen (dynamisch)..
Betrachten wir eine einfache DLL. Der folgende Code für "circle.dll" exportiert eine Funktion namens "CircleArea", die die Fläche eines Kreises anhand des angegebenen Radius berechnet:
Sobald Sie die circle.dll haben, können Sie die exportierte "CircleArea" -Funktion aus Ihrer Anwendung verwenden.
Der einfachste Weg, eine Prozedur oder Funktion zu importieren, besteht darin, sie mit der externen Direktive zu deklarieren:
Wenn Sie diese Deklaration in den Interface-Teil einer Unit aufnehmen, wird circle.dll beim Programmstart einmalig geladen. Während der Ausführung des Programms steht die Funktion CircleArea allen Einheiten zur Verfügung, die die Einheit verwenden, in der sich die obige Deklaration befindet.
Sie können auf Routinen in einer Bibliothek durch direkte Aufrufe von Win32-APIs zugreifen, einschließlich LoadLibrary, FreeLibrary, und GetProcAddress. Diese Funktionen sind in Windows.pas deklariert.
So rufen Sie die CircleArea-Funktion mit dynamischem Laden auf:
Beim Importieren mit dynamischem Laden wird die DLL erst beim Aufruf von LoadLibrary geladen. Die Bibliothek wird durch den Aufruf von FreeLibrary entladen.
Beim statischen Laden wird die DLL geladen und ihre Initialisierungsabschnitte werden ausgeführt, bevor die Initialisierungsabschnitte der aufrufenden Anwendung ausgeführt werden. Dies wird beim dynamischen Laden umgekehrt.
Hier ein einfacher Überblick über die Vor- und Nachteile des statischen und dynamischen Ladens von DLLs:
Statische Belastung
Vorteile:
Nachteile: