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
| Old | New | Line | |
|---|---|---|---|
| 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).* |
