Tutorial
Erstellen einer DLL mit FreeBASIC
von ytwinky | Seite 1 von 2 |
FreeBASIC bietet mehrere Möglichkeiten, Funktionen und Sub's zusammenzufassen und anderen Programmen zur Verfügung zu stellen. Wir möchten aber unsere Funktionen und Sub's in eine DLL(Dynamic Link Library) packen. Beim Wühlen in der Befehlsreferenz haben wir Befehle zum Erstellen von dynamischen Libraries gefunden und eigentlich garnichts davon verstanden. Das ist natürlich kein befriedigender Zustand, deshalb möchten wir das ändern. Doch wie fangen wir an?
Dazu sehen wir uns zunächst die Compiler-Optionen an: In einem Dos-Fenster geben wir
fbc
ein und werden bereits bei DLL fündig (eine Übersetzung der Ausgabe ist hier zu finden).
Na, das sieht doch schon mal gut aus, denn genau dies haben wir ja vor ;-))
Bevor wir aber damit anfangen, schauen wir uns den Artikel in Wikibooks an, der auch (den größten Teil) zu diesem Tutorial beigetragen hat ;-))
Die Funktionen, die wir in eine DLL packen wollen, stehen in der Datei "yetlib.bas":
Sub PrintAt( _
byRef Msg As String, _
Farbe As Integer=LoWord(Color), _
Zeile As Integer=CsrLin, _
Spalte As Integer=Pos _
)
Dim As Integer Alt=LoWord(Color)
Color Farbe
Locate Zeile, Spalte
?Msg
Color Alt
Input "Test", Msg
If Msg="" Then
Msg="Wasn?"
End If
End Sub
'soll einen Wert zurückgeben..
Function Deg2Rad(WinkelInDeg As Double) As Double Export
Return WinkelInDeg/45.0*Atn(1.0)
End Function
'soll einen Wert zurückgeben..
Function Rad2Deg(WinkelInRad As Double) As Double Export
Return WinkelInRad/Atn(1.0)*45.0
End Function
Function MenuChar( _
byVal MenuItem As String, _
byVal First As Integer=1, _
byVal nVG As Integer=12 _
) As String Export '12=hellrot
Dim cVG As Integer=LoWord(Color)
If First<>1 Then ?Left(MenuItem, First-1);
Color nVG
?Chr(MenuItem[First-1]);
Color cVG
Return Mid(MenuItem, First+1)
'ist nicht so schlimm, da der Benutzer ja sowieso lesen muß..
End Function
Function GetKeyPress( _
byVal Msg As String, _
byVal Allowed As String, _
byVal Upper As Integer=-1 _
) As String
Dim As String y=""
If Upper Then Allowed=UCase(Allowed)
If Msg<>"" Then ?Msg;
Do
y=Inkey
Sleep 1
If Upper Then y=UCase(y)
Loop Until Instr(Allowed, y)
Function=y
End Function
Nun ist es aber leider nicht damit getan, eine Sammlung von Routinen zusammenzustellen. Wir müssen dem Compiler ja auch noch eine spezielle Beschreibung dafür zukommen lassen:
Declare Sub PrintAt Lib "yetlib" Alias "PrintAt" ( _
byRef Msg As String, _
Farbe As Integer=LoWord(Color), _
Zeile As Integer=CsrLin, _
Spalte As Integer=Pos _
) 'Spezialdeklation für PrintAt usw.
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
Diese fügen wir zu Anfang ein. Das ist eine bewußte Schikane, denn wer den fertigen Code einfach nur kompiliert und dies hier nicht liest, kommt sowieso nicht weit..
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|