shared library/de

From Lazarus wiki

Deutsch (de) | English (en) | español (es) | 한국어 (ko)

Zurück zu den Zusätzlichen Informationen.


Erstellen einer einfachen Windows-DLL

Für dieses Tutorial wurde Lazarus 1.0.4 mit FPC 2.6.0 verwendet.


Für welche Windowsversion wird die Dll erstellt?

Das Beispiel zeigt das erstellen einer einfachen DLL für Windows 32 Bit und Windows 64 Bit.
Diese einfache Windows-Dll dient an anderer Stelle als Beispiel wie Dll's in Windows statisch und dynamisch eingebunden werden.


Ein Projekt erstellen

  • Starten Sie Lazarus.
  • Klicken Sie im Menü auf "Projekt" -> "Neues Projekt ...".

Es öffnet sich ein Fenster (Dialog) mit dem Titel "Erzeuge neues Projekt".

  • Klicken Sie in dem Fenster (Dialog) auf den Punkt "Bibliothek".
  • Klicken Sie in dem Fenster (Dialog) auf den Button "OK".

Lazarus erstellt ein neues Projekt.

  • Speichern Sie dieses Projekt
  • Klicken Sie im Menü auf "Datei" -> "Alles speichern"

Es erscheint das Fenster (Dialog) zum speichern des Projektes.

  • Steuern (navigieren) Sie mit dem Fenster (Dialog) zu der Stelle, an der das Projekt gespeichert werden soll.
  • Klicken Sie in dem Fenster (Dialog) auf den Button "Speichern".


Ihre lpr-Datei sollte in etwa so aussehen:

library TestDll;  // Hier steht der Name, unter dem Sie Ihr Projekt gespeichert haben
                  // In diesem Beispiel heisst die DLL TestDll

{$mode objfpc}{$H+}

uses
  Classes;

begin
end.



Eine eigene Funktion in das Projekt einfügen

Das obige Beispiel macht ohne eine Funktion noch keinen Sinn.
Das Projekt TestDll bekommt eine eigene Funktion, der von einem externen Programm ein Wert übergeben wird und die einen Wert zurück gibt.

Für die Übergabeparameter wurden der Datentyp PChar und die Aufrufkonvention stdcall gewählt.
Der Grund dafür ist einfach. Beide der Datentyp PChar als Übergabeparameter und die Aufrufkonvention stdcall sind Windowsstandard.

Im Beispiel wird der Funktion funTestFunktion ein Wert übergeben, der sofort wieder zurückgegeben wird.

library TestDll;

{$mode objfpc}{$H+}

// Da in diesem Beispiel keine Units eingebunden werden, wurde auf den Abschnitt uses verzichtet.

  function funTestFunktion(chrZeichenkette: PChar): PChar; stdcall;
  begin
    Result := chrZeichenkette;
  end;

begin // Der Abschnitt begin wird weiter unten durch den Abschnitt exports ersetzt.
end.



Die eigene Funktion exportieren

Damit die eigene Funktion von anderen Programmen verwendet werden kann, muss sie exportiert werden.
Diese Aufgabe erledigt der Abschnitt exports.
Der Abschnitt exports steht am Ende der Projektdatei (lpr-Datei).
Im Abschnitt exports stehen alle Unterprogramme (Prozeduren und Funktionen) die exportiert werden sollen.
Im alle Unterprogramme (Prozeduren und Funktionen) die exportiert werden sollen werden durch ein Komma getrennt.
Der Abschnitt exports wird durch ein Semikolon (;) abgeschlossen.

So sieht eine einfache und funktionsfähige Dll aus:

library TestDll;

{$mode objfpc}{$H+}

// Da in diesem Beispiel keine Units eingebunden werden, wurde auf den Abschnitt uses verzichtet.

  function funTestFunktion(chrZeichenkette: PChar): PChar; stdcall;
  begin
    Result := chrZeichenkette;
  end;

exports            // Der Abschnitt exports ersetzt den Abschnitt begin.
  funTestFunktion; // Hier stehen die Namen der Unterprogramme, die die Dll exportiert.
                   // In unserem Beispiel wird nur ein Unterprogramm exportiert.
end.


Als letzter Schritt muss das Programm noch compiliert werden und fertig ist die erste Dll.


--Olaf 14:02, 13 March 2013 (UTC)