Sign in Join
Wiki copytemporary

shared library/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: shared library/de

OldNewLine
1+Zurück zu den [[Additional information/de|Zusätzlichen Informationen]].
2+
3+# Erstellen einer einfachen Windows-DLL
4+
5+Für dieses Tutorial wurde Lazarus 1.0.4 mit FPC 2.6.0 verwendet.
6+
7+# Für welche Windowsversion wird die Dll erstellt?
8+
9+Das Beispiel zeigt das erstellen einer einfachen DLL für Windows 32 Bit und Windows 64 Bit.
10+
11+Diese einfache Windows-Dll dient an anderer Stelle als Beispiel wie Dll's in Windows statisch und dynamisch eingebunden werden.
12+
13+# Ein Projekt erstellen
14+
15+- Starten Sie Lazarus.
16+- Klicken Sie im Menü auf "Projekt" -\> "Neues Projekt ...".
17+
18+Es öffnet sich ein Fenster (Dialog) mit dem Titel "Erzeuge neues Projekt".
19+
20+- Klicken Sie in dem Fenster (Dialog) auf den Punkt "Bibliothek".
21+- Klicken Sie in dem Fenster (Dialog) auf den Button "OK".
22+
23+Lazarus erstellt ein neues Projekt.
24+
25+- Speichern Sie dieses Projekt
26+- Klicken Sie im Menü auf "Datei" -\> "Alles speichern"
27+
28+Es erscheint das Fenster (Dialog) zum speichern des Projektes.
29+
30+- Steuern (navigieren) Sie mit dem Fenster (Dialog) zu der Stelle, an der das Projekt gespeichert werden soll.
31+- Klicken Sie in dem Fenster (Dialog) auf den Button "Speichern".
32+
33+Ihre lpr-Datei sollte in etwa so aussehen:
34+
35+``` pascal
36+library TestDll; // Hier steht der Name, unter dem Sie Ihr Projekt gespeichert haben
37+ // In diesem Beispiel heisst die DLL TestDll
38+
39+{$mode objfpc}{$H+}
40+
41+uses
42+ Classes;
43+
44+begin
45+end.
46+```
47+
48+# Eine eigene Funktion in das Projekt einfügen
49+
50+Das obige Beispiel macht ohne eine Funktion noch keinen Sinn.
51+
52+Das Projekt TestDll bekommt eine eigene Funktion, der von einem externen Programm ein Wert übergeben wird und die einen Wert zurück gibt.
53+
54+Für die Übergabeparameter wurden der Datentyp PChar und die Aufrufkonvention stdcall gewählt.
55+
56+Der Grund dafür ist einfach. Beide der Datentyp PChar als Übergabeparameter und die Aufrufkonvention stdcall sind Windowsstandard.
57+
58+Im Beispiel wird der Funktion funTestFunktion ein Wert übergeben, der sofort wieder zurückgegeben wird.
59+
60+``` pascal
61+library TestDll;
62+
63+{$mode objfpc}{$H+}
64+
65+// Da in diesem Beispiel keine Units eingebunden werden, wurde auf den Abschnitt uses verzichtet.
66+
67+ function funTestFunktion(chrZeichenkette: PChar): PChar; stdcall;
68+ begin
69+ Result := chrZeichenkette;
70+ end;
71+
72+begin // Der Abschnitt begin wird weiter unten durch den Abschnitt exports ersetzt.
73+end.
74+```
75+
76+# Die eigene Funktion exportieren
77+
78+Damit die eigene Funktion von anderen Programmen verwendet werden kann, muss sie exportiert werden.
79+
80+Diese Aufgabe erledigt der Abschnitt exports.
81+
82+Der Abschnitt exports steht am Ende der Projektdatei (lpr-Datei).
83+
84+Im Abschnitt exports stehen alle Unterprogramme (Prozeduren und Funktionen) die exportiert werden sollen.
85+
86+Im alle Unterprogramme (Prozeduren und Funktionen) die exportiert werden sollen werden durch ein Komma getrennt.
87+
88+Der Abschnitt exports wird durch ein Semikolon (;) abgeschlossen.
89+
90+So sieht eine einfache und funktionsfähige Dll aus:
91+
92+``` pascal
93+library TestDll;
94+
95+{$mode objfpc}{$H+}
96+
97+// Da in diesem Beispiel keine Units eingebunden werden, wurde auf den Abschnitt uses verzichtet.
98+
99+ function funTestFunktion(chrZeichenkette: PChar): PChar; stdcall;
100+ begin
101+ Result := chrZeichenkette;
102+ end;
103+
104+exports // Der Abschnitt exports ersetzt den Abschnitt begin.
105+ funTestFunktion; // Hier stehen die Namen der Unterprogramme, die die Dll exportiert.
106+ // In unserem Beispiel wird nur ein Unterprogramm exportiert.
107+end.
108+```
109+
110+Als letzter Schritt muss das Programm noch compiliert werden und fertig ist die erste Dll.
111+
112+---
113+*From the Free Pascal wiki, page "shared library/de", as it stood on 2020-02-26 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history