Tutorial
Erstellen einer DLL mit FreeBASIC
von ytwinky | Seite 2 von 2 |
..und wo wir gerade bei kompilieren sind, machen wir's doch gleich mal. Hat's geklappt? Bei mir ja, keine Fehler..
Das war ja auch nur ein Test! Wir haben nämlich eine Exe erstellt, die nur aus Sub's und Functions besteht, aber wir wissen jetzt, daß sie 'fehlerfrei' ist/sein könnte :D Um eine DLL zu erstellen müssen wir aber unseren QuellCode mit der Compiler-Option '-dylib' kompilieren. Der Befehlszeilen-Aufruf dazu wäre:
fbc yetlib.bas -dylib
Benutzer der FBIde müssen unter Ansicht-->Einstellungen-->FreeBASIC im Eingabefeld 'Compile-Befehl' noch ein ' -dylib' anfügen(aber ohne die ''). Dann können wir jetzt kompilieren(Benutzer der FBIde Achtung: Nicht F9, denn das ist Kompilieren und Ausführen).
Wir haben eine DLL erstellt: yetlib.dll
(Nebenbei und nur zu unserem Vorteil hat der fbc auch noch eine yetlib.dll.a erstellt, die er für die spätere Verarbeitung benötigt)
Und wo wir schon mal bei der späteren Verarbeitung sind, können wir auch gleich mal die 'yetlib.bi' erstellen. Mit dieser Datei wird es möglich sein, in einem FreeBASIC-Programm mit der Anweisung
#include "yetlib.bi"
, die Funktionen und Subs unserer neuen DLL zu benutzen. Hier kommt die yetlib.bi:
Declare Sub PrintAt Lib "yetlib" Alias "PrintAt" ( _
byRef Msg As String, _ 'das ist die auszugebende Meldung, um Msg ändern zu können: byRef
Farbe As Integer=LoWord(Color), _ 'gewünschte Farbe, Standard:aktuelle Farbe
Zeile As Integer=CsrLin, _ 'gewünschte Zeile, Standard:aktuelle Zeile
Spalte As Integer=Pos _ 'gewünschte Spalte, Standard:aktuelle Spalte
)
Declare Function Deg2Rad lib "yetlib" Alias "Deg2Rad" _
(WinkelInDeg As Double) As Double 'soll einen Wert zurückgeben..
Declare Function Rad2Deg lib "yetlib" Alias "Rad2Deg" _
(WinkelInRad As Double) As Double 'soll einen Wert zurückgeben..
Declare Function MenuChar Lib "yetlib" Alias "MenuChar" ( _
byVal MenuItem As String, _
byVal First As Integer=1, _
byVal nVG As Integer=12 _
) As String '12=hellrot
Declare Function GetKeyPress lib "yetlib" Alias "GetKeyPress" ( _
byVal Msg As String, _
byVal Allowed As String, _
byVal Upper As Integer=-1 _
) As String
Das haben wir doch schon mal gesehen, oder? Richtig, es ist der Kopf, den wir unserer Routinen-Sammlung vorangestellt haben.
Das sind alles nur vorbereitende Arbeiten, wir schreiben uns eben noch schnell ein Hauptprogramm, das diese DLL auch benutzt:
'Ä=Ž , Ö=™ , Ü=š ; ä=„ , ö=”, ü= , ß=á ,§=õ , ©=¸
#include once "yetlib.bi"
Const Esc=!"\27"
Dim As String y="Hallo Welt"
PrintAt(y, 2, 7)
Print y
PrintAt("Normal",, 1)
Print Deg2Rad(45.0)
Print Rad2Deg(Deg2Rad(45.0))
PrintAt("Men:", 14, 10, 40)
Print MenuChar("Norden")
Print MenuChar("Sden")
Print MenuChar("Osten")
Print MenuChar("Westen")
Print MenuChar("Wohin m”chtest du gehen(Standard:Osten)", 34);
Do
y=GetKeyPress("", "NSOW" &Esc)
Loop Until InStr("NSOW" &Esc, y)
Print y
Print "Eniki..";
Sleep
So, schnell noch übersetzen und..
Achdujeh, Fehlermeldungen? Das war ja zu erwarten ;-)) Das Hauptprogramm darf natürlich nicht mit '-dylib' übersetzt werden^^
Also, entfernen und noch mal..
Immer noch Fehlermeldungen? Kein Wunder, denn ich habe die Funktion GetKeyPress() aus einem anderen Programm mit Copy&Paste eingefügt und dabei 'vergessen', das Export einzufügen, das holen wir schnell mal nach..
..und prüfen gleich, ob es auch bei den anderen Routinen steht.
(Falls die Input-Anweisung in PrintAt, die ja überhaupt keinen Nährwert hat und auch nur zu Testzwecken drinsteht, zu sehr nervt, können wir sie auch gleich entfernen, samt zugehöriger If-Anweisung. Dann könnten wir in PrintAt() noch das byRef entfernen und schon haben wir ganz brauchbare Funktionen.)
Jetzt muß die DLL aber neu erstellt werden(Achtung, das war die Geschichte mit '-dylib', nicht vergessen..)
An yetlib.bi haben wir ja nichts geändert, also können wir jetzt neu übersetzen(Alle von mir eingebauten Fehler sind nun bereinigt).
Mit diesem Schema sollte es einfach sein, erste Versuche mit DLL's zu unternehmen.
Gruß
ytwinky
Anhang: die 3 nötigen Dateien können Sie hier downloaden:
yetlib.bas
yetlib.bi
test_yetlib.bas
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|