Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Erstellen einer DLL mit FreeBASIC

von RedakteurytwinkySeite 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 Befehlsreferenzeintrag 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

 

Gehe zu Seite Gehe zu Seite  1  2  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 18.08.2007 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 25.05.2009 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen