Programmierkurs: Delphi: DLL-Programmierung

Aus Wikibooks

Wechseln zu: Navigation, Suche

[Bearbeiten] DLL-Programmierung

[Bearbeiten] Was ist eine DLL?

Eine DLL (Dynamic Link Library) kann Routinen und Forms beinhalten, die dann in ein beliebiges Programm eingebunden werden können, auch in andere Sprachen. Dazu wird die DLL in den Speicher geladen, von wo aus alle Anwendungen auf sie zurückgreifen können. Aus diesen Eigenschaften ergeben sich folgende Vorteile:

  • Programmiersprachenunabhängiges Programmieren
  • Beim Benutzen durch mehrere Anwendungen wird der Code nur einmal geladen
  • Die DLL kann dynamisch in den Code eingebunden werden

[Bearbeiten] Das Grundgerüst einer DLL

Klickt man auf Datei->Neu->DLL erhält man folgendes Grundgerüst für eine DLL:

library Project1;
{ ...Kommentare (können gelöscht werden)...}
uses
  SysUtils,
  Classes;

begin
end.

Wie man sieht, wurde das für ein Programm übliche program durch library ersetzt, dadurch „weiß“ der Compiler, dass er eine DLL kompilieren soll und dieser die Endung .dll gibt.

In den Bereich zwischen dem Ende des uses und dem begin können nun beliebig viele Prozeduren und Funktionen eingegeben werden. Wenn man die DLL nun kompiliert, kann man allerdings noch nichts mit ihr anfangen! Man muss die Funktionen/Prozeduren, die man aus der DLL nutzen soll, exportieren! Dazu benutzt man vor dem Abschließenden begin end folgenden Code:

exports
  Funktion1 index 1,
  Funktion2 index 2;

Dadurch kann man diese Funktionen aus jedem Windows-Programm nutzen. Da andere Sprachen allerdings andere Aufrufkonventionen besitzen, muss der Funktionsdeklaration ein stdcall; hinzugefügt werden, das für den Standard-Aufruf von anderen Sprachen steht. Damit erhält man z.B. folgenden Code:

library DemoDLL;

uses
  SysUtils,
  Classes;

function Addieren(x, y: Byte): Word; stdcall;
begin
  Result := x + y;
end;

function Subtrahieren(x, y: Byte): ShortInt; stdcall;
begin
  Result := x - y;
end;

exports
  Addieren index 1,
  Subtrahieren index 2;

begin
end.


Arrow left.png Dynamische Datenstrukturen Inhaltsverzeichnis Assembler und Delphi Arrow right.png
Persönliche Werkzeuge