Frage deutsch
~~~~~~~~~~~~~
Was ist eine Bibliothek und wie gehe ich damit um?
 
Was versteht man eigentlich unter einer "Bibliothek"?
Wie binde ich eine oder mehrere Bibliotheken in mein Programm ein?
Wie erstelle ich eine eigene Bibliothek?
Was ist der Unterschied zwischen .QLB- und .LIB-Bibliotheken?
 

Question English
~~~~~~~~~~~~~~
What's a library and how do I use it?
 
How can I link one or more libraries to my program?
How can a generate my own library?
What's the difference between .QLB and .LIB libraries?
 
 
Antwort 1
~~~~~~~~~~
.
[ von Andre Klein ( www.iconsoft.de), ergänzt von Thomas Antoni, 22.1.2004 - 7.5.2004 ]
 

Bibliotheken in Qbasic - Von Andre Klein
 
 
*** Inhalt
- Was ist eine Bibliothek?
- Warum sollte ich eine Bibliothek benutzen?
- Wie lade ich eine QLB-Bibliothek?
- Wie benutze ich SUB'S wenn ich die Bibliothek geladen habe?
- Was ist eine BI-Datei?
- Wie lade ich eine BI-Datei?
- Wie erstelle ich eine Bibliothek?
- Wie erstelle ich eine BI-Datei?
- Was hat es mit der LIB-Datei auf sich?
- EXE-Programm erstellen, das eine Bibliothek benutzt
- Wie erstelle ich eine QLB-Datei aus einer oder mehreren LIB-Dateien?
- Eine Bibliothek in einer anderen Programmiersprache erstellen
- Abschließende Worte
 
*** Was ist eine Bibliothek?
Eine Bibliothek (engl. "Library") ist eine Sammlung von SUB's, FUNCTION's und/oder TYPE's die in einer externen Datei gespeichert sind. Bibliotheken kann man nur in QuickBASIC (z.B. V4.5), nicht in QBasic 1.1 verwenden.
 
Bei QuickBASIC gibt es zwei Arten von Bibliotheken: "Normale Bibliotheken (Dateiendung .LIB) und Quick-Bibliotheken (.QLB).
 
Die Unterschiede zwischen QLB- und LIB-Bibliotheken kannst Du gelegentlich im
untenstehenden Abschnitt "
Zwei Bibliotheks-Arten: .QLB- und .LIB-Bibliotheken" nachlesen.
Wir wollen uns hier zunächst nur mit den QLB-Bibliotheken (engl. "QuickLibries") befassen.
 
 
*** Warum sollte ich eine Bibliothek benutzen?
Bibliotheken kann man einsetzen wenn man z.B. sehr viele SUB's geschrieben hat die man sehr oft auch in anderen Programmen benötigt. Ohne Bibliothek müßtest Du immer wieder alle SUB's in Dein neues Programm schreiben oder eine "Blanko"-Datei haben. Das kostet jede Menge Zeit und ist aufwendig! Wenn Du aber eine Bibliothek hast, in der diese ganzen SUB's drin stehen, dann brauchst Du diese nur einmal laden und kannst dann alle SUB's benutzen die dort gespeichert sind! Und das ist doch viel bequemer oder?
 
Ein weiterer Grund für den Einsatz von Bibliotheken wäre der, das Du vieleicht Dein e SUB's an Freunde, Bekannte und Unbekannte weitergeben möchtest. Und da ist eine Bibliothek besser als ein Quellcode-Programm, aus dem sich derjenige dann die ganzen SUB's rauskopieren müßte! Ein weiterer Vorteil ist der, dass der Quellcode selber in einer Bibliothek nicht erkennbar ist! Das heißt, Du schreibst jetzt z.B. eine Super-SUB und möchtest anderen die Funkion zeigen. Da Du aber willst, dass keiner wissen soll, wie Du das gemacht hast, gibst Du natürlich nur die Bibliothek weiter, weil dort der Quellcode ja nicht mehr erkennbar ist! Anwendungen für Bibliotheken sind z.B. GRAFIK-SUB's, SOUND-SUB's etc. Also solche SUB's die man wirklich nur einmal schreibt und dann immer wieder unverändert benutzt.
 
Es gibt im Internet auch jede Menge guter Bibliotheken, die Du in Deinen Programmen verwenden kannst und die Dir viel Programmierarbeit abnehmen. Da gibt es z.B. Multimedia-Bibliotheken mit Grafik- und Sound-Funktionen für den Spieleentwickler sowie Toolboxen für die Programmierung allgemeiner Anwendungen.
 
*** Wie lade ich eine QLB-Bibliothek?
Eine Bibliothek kann erst ab der QuickBASIC-Version 4.0 geladen werden. Um eine Bibliothek zu laden ruft man QB einfach mit der Option /L auf (L = Library, zu deutsch Bibliothek). Die ganze Befehlszeile sieht dann so aus:
QB.exe /L namederbibliothek.QLB
 
Bei diesem Aufruf muß man darauf achten, dass sich die Bibliothek (die QLB-Datei) im aktuellem Verzeichnis befindet oder der Pfad zur Bibliothek angegeben wird. Ansonsten kommt die Fehlermeldung, dass die Bibliothek nicht gefunden wurde. Wenn man QB /L ohne den Namen einer Bibliothek eingibt, dann nimmt QB automatisch die QB.QLB die sich im QB-Hauptverzeichnis befindet. Dort sind die SUB's CALL ABSOLUTE, CALL INTERRUPT und CALL INTERRUPTX definiert.

*** Wie benutze ich SUB'S wenn ich die Bibliothek geladen habe?
Nach dem Start von QB.EXE mit dem obenstehenden Kommando siehst Du ein leeres QB-Editorfenster.
 
Wenn Du jetzt eine SUB aus Dein er Bibliothek aufrufen willst dann machst Du das mit dem gleichen Befehl mit dem Du auch SUB's aufrufst die direkt in Dein em QB-Programm enthalten sind. Also mit CALL.
z.B.
CALL meinsub (option1%, option2%, wert1%)
 
WICHTIG: Wenn Du NUR die QLB-Datei geladen hast, dann mußt Du IMMER ein CALL für alle QLB-SUBs benutzen!!! Und FUNCTION's funktionieren leider auch nicht. Damit Du kein CALL brauchst und FUNCTION's funktionieren, musst Du sie korrekt am Programmanfang mit den Übergabeparametern deklarieren. Oder Du fügst eine "BI"-Datei ein, die die erforderlichen Deklarationen enthält.
 
*** Was ist eine BI-Datei?
Wenn Du ein QB-Programm schreibst und SUB's anlegst, dann schreibt QB automatisch an den Anfang Dein es Programmes einige DECLARE-Anweisungen. Das gleiche passiert auch bei FUNCTION's. Und eine BI-Datei enthält nichts anderes als diese DECLARE-Anweisungen, und wenn man sie braucht auch TYPE's. Ansonsten keinerlei Quellcode.
 
Bei fertigen Bibliotheken, die Du im Internet herunterladen kannst, wird die .BI-Datei häufig mundgerecht mitgeliefert.
 
 
*** Wie lade ich eine BI-Datei?
Um eine BI-Datei zu laden musst Du in Deinem QUELLCODE-Programm Folgendes schreiben:
REM $INCLUDE: 'namederbidatei.BI'
 
Diese Datei muss sich im aktuellen Verzeichnis befinden, oder es muß der Pfad zu der Datei mit angegeben werden. Wenn eine BI-Datei zusätzlich zu der dazugehörigen QLB geladen wird, brauchst Du auch kein CALL mehr vor Deine SUB-Aufrufe schreiben und FUNCTION's funktionieren dann auch problemlos. Ein Beispiel für eine BI-Datei ist die QB.BI im QB-Hauptverzeichnis.
 
Der Metabefehl $INCLUDE bewirkt, dass der Inhalt der angegebenen Datei quasi in den Quelltext eingefügt ("inkludiert") wird.
 
 
*** Wie erstelle ich eine Bibliothek?
Um eine Bibliothek erstellen zu können, brauchst Du theoretisch mindestens QB V4.0. QB V4.0 kann zwar Bibliotheken erstellen, produziert bei mir aber immer einen Fehler. Deshalb benutze ich QB V4.5. Vorgangsweise:
 

1. Schreibe ein QB-Programm mit allen SUB's, FUNCTION's und TYPE's die Du später in Deiner Bibliothek haben möchtest.
 

2. Wenn Du das gemacht hast und alles funtioniert, dann gehe auf AUSFÜHREN und dann auf BIBLIOTHEK erstellen.
 

3. Gib einen Namen für die Bibliothek ein. z.B. "TEST" . Die Bibliothek heißt
dann TEST.QLB.
 

4. Das Kreuz bei DEBUG-CODE ERSTELLEN kannst, musst Du aber nicht machen. Das dient nur zur Fehlerbehandlung in Dein er Bibliothek während der Testphase.
 

5. Wenn das erledigt ist, gehst Du auf BIBLIOTHEK ERSTELLEN oder auf BIBLIOTHEK
ERSTELLEN UND BEENDEN und drückst ENTER.
 

6. Jetzt kommt ein schwarzer Bildschirm mit jeder Menge Informationen über das Erstellen der Bibliothek. Dort zeigt QB dir auch an, ob irgendwelche Fehler aufgetreten sind.
 

7. Wenn QB keine Fehler gefunden hat und alles geklappt hat, dann müsste sich jetzt im Verzeichnis eine TEST.QLB und eine TEST.LIB befinden. Die QLB-Datei ist Dein e fertige Bibliothek. Die LIB-Datei ist eine Art Zwischencode, in der zwar alle SUBS usw. drinstehen, aber QB kann sie nicht benutzen. Sie erfüllt einen anderen Zweck, zu dem ich später noch kommen werde. Damit ist die Bibliothek fertig.
 
Was wir jetzt noch brauchen ist eine BI-Datei für unsere Bibliothek.
 
 
*** Wie erstelle ich eine BI-Datei?
Um eine BI-Datei zu erstellen, markierst Du in Dein em QB-Programm alle DECLARE- und TYPE-Anweisungen. Gehst auf BEARBEITEN und KOPIEREN. Dann gehst Du auf DATEI und NEU. Dort fügst Du die soeben kopierten DECLARE-Anweisungen ein. Dann DATEI -> SPEICHERN UNTER. Dort gibst Du den Namen für Deine BI-Datei ein und speicherst das ganze. WICHTIG: schreibe .bi unbedingt dazu sonst speichert QB es als BAS-Datei. Das wars dann auch schon. Jetzt hast Du eine fertige QLB-Datei mit der dazugehörigen BI-Datei. Diese kannst Du jetzt wie bei "Wie lade ich eine Bibliothek?" beschrieben in Deinem Programm verwenden.

 
*** Was hat es mit der LIB-Datei auf sich?
Eine LIB-Datei entsteht wenn man mit QB eine Bibliothek erstellt. In ihr sind, genauso wie in der QLB-Datei, auch alle SUB's und FUNCTION's gespeichert. Aber QB kann mit einer LIB nichts anfangen, da eine LIB-Datei soetwas wie einen Zwischencode enhält. Aber man kann mit ihr eine schöne andere Sache machen!
 

Beispiel:
Du hast eine Bibliothek erstellt die nur Grafik-SUB's enthält und eine 2. Bibliothek die nur Sound-Subs enthält. Du hast jetzt folgende Dateien: grafik.QLB, grafik.LIB, sound.QLB, sound.LIB So, und jetzt möchtest Du ein Programm schreiben das sowohl Grafik als auch Sound benutzt und müßtest eigentlich 2 Bibliotheken laden. ABER: Das Problem ist das man immer nur 1 Bibliothek laden kann. Also müßte man irgendwie aus 2 Bibliotheken 1 machen. Und dafür sind die LIB-Dateien da. Denn man kann aus mehreren LIB-Dateien eine neue QLB-Datei machen.
 
 
*** EXE-Programm erstellen, das eine Bibliothek benutzt
Auch zum Erstellen einer EXE-Datei wird die .LIB-Datei benötigt. Hierzu reicht die QLB-QuickLibrary nicht aus: Um ein in Verbindung mit einer .QLB Quick-Bibliothek lauffähiges Programm kompilieren zu können, muss zusätzlich eine Bibliothek gleichen Namens mit der Endung .LIB vorhanden sein. Diese Bibliotheken werden vom Linker in das Programm eingebunden.

 
*** Wie erstelle ich eine QLB-Datei aus einer oder mehreren LIB-Dateien?
Bei QuickBASIC 4.4 musst Du diesen Befehl in der Befehlszeile eingeben:
LINK.EXE /QU erste.LIB + zweite.LIB + ... , namederneuenqlb.QLB, NUL, BQLB45
 
Wenn Du nur eine LIB-Datei hast, dann lässt Du "+zweite.LIB + ..." natürlich weg.
 
Bei QuickBASIC 7.1/PDS lautet der letzte Eintrag anders. Gib dort folgendes
ein:
LINK.EXE /QU erste.LIB + zweite.LIB + ... , namederneuenqlb.QLB, NUL, QBXQLB.LIB
 
Und schon hast Du eine Bibliothek die sich aus mehreren LIB's zusammensetzt.
 
Wenn Du statt "NUL" einen beliebigen Dateinamen eingibst, z.B. log.txt, so erhältst Du eine Textdatei mit einem Protokoll über den Linkvorgang.
 

TIPP: wenn Du Speicher sparen möchtest kannst Du Dein e ganzen SUB's in einzelne LIB's tun und ein Programm schreiben das je nach Bedarf die jeweiligen LIB's/SUB's zu einer QLB-Datei zusammenfügt. Das nennt man dann ein Baukastenprinzip!
 
Mehrere QLB-Bibliotheken kannst Du übrigens nicht direkt zu einer zusammenfassen. Du benötigts dazu immer die zu Grunde liegenden LIB-Dateien, die Du dann nach dem oben stehenden Schema zusammenfügen kannst.
 
 
*** Eine Bibliothek in einer anderen Programmiersprache erstellen
Du kannst eine Bibliothek statt mit QB auch in einer anderen Programmiersprache erstellen. Viele im Internet erhältliche QB-Bibliotheken sind z.B. in Assembler oder in C geschrieben. Dabei muss man die QB-Konventionen bei der Parameterübergabe einhalten, worauf ich aber jetzt nicht näher eingehen will.
 
 
*** Abschließende Worte
So ich hoffe das war ausführlich und verständlich genug. Wenn Du weitere Fragen hast oder ich irgend etwas falsch beschrieben habe, dann sende mir bitte eine Mail an webmaster*iconsoft.de .

 
 
 
Antwort 2
~~~~~~~~~~
[ von Thomas Antoni, 19.5.2002 - 27.12.2005 ]
.
(unter Verwendung von Passagen aus den Büchern "Das große QuickBASIC Buch", Seiten 39, 335 und 730ff sowie "Microsoft QuickBASIC Bible", Seite 45)
 
 
*** Inhalt
- Was ist eine Bibliothek?
- Bibliotheken bei QuickBASIC
- Zwei Bibliotheks-Arten: .QLB- und .LIB-Bibliotheken
- Übersicht: Wie binde ich eine Bibliothek in mein Programm ein?
- Quick-Bibliotheken .QLB
- Link-Bibliotheken .LIB
- Beispiel für das Erzeugen und Einbinden einer .LIB-Bibliothek
 
 
*** Was ist eine Bibliothek?
Bibliotheken sind fertig kompilierte QB-Programmteile oder auch kompilierte bzw. assemblierte Programmroutinen aus anderen Programmiersprachen, z.N. C oder Assembler. Eine Bibliothek ist eine eigenständige Datei und enthält in der Regel eine Reihe von SUBs und FUNCTIONs. Eine Bibliothek kann zu einem Anwenderprogramm "hinzugebunden" werden Das Anwenderprogramm kann dann die in der Bibliothek enthaltenen SUBs und FUNCTIONs beliebig aufrufen.
 
 
*** Bibliotheken bei QuickBASIC
In QuickBasic ab Version 4.0 kannst Du häufig benötigte SUBs und FUNCTIONs in eine sogenannte -> Bibliothek (engl. "Library") zusammenfassen und somit auf einfache und platzsparende Weise als externe Datei in Deinen Programmen verwenden.
 
Du kannst auch auf ausgereifte, leistungsfähige Bibliotheken professioneller Programmierer zurückgreifen. Diese sind häufig in ->
Assembler oder -> C/C++ geschrieben und laufen blitzschnell ab.
 
Auf
www.qbasic.de findest Du in der Rubrik "QBasic -> Download -> Libraries" die besten Bibliotheken für QuickBasic 4.5. und 7.1 mit den wichtigsten Funktionen aus den Bereichen Multimedia, hochauflösende und animierte Grafik, Sound, Maus, schnelle Tastatur-Routinen, Nutzung des erweiterten EMS/XMS- Speichers und Spielefunktionen.
 
Mehr Informationen über die besten QB-Bibliotheken findest Du in dem Eintrag
"Wo kriege ich gute Bibliotheken für QuickBasic her?" .
 
Bei QuickBasic unterscheidet man zwischen "normalen" Bibliotheken (Dateiendung ".LIB") und QuickLibraries (Dateiendung ".QLB"). mehr Informationen zu QLBs findest Du im Eintrag
"Was ist eine QLB (QuickLibrary)?" .
 
 
*** Zwei Bibliotheks-Arten: .QLB- und .LIB-Bibliotheken
Bei QuickBASIC können Bibliotheken in zwei verschiedenen Formen vorliegen: als Link- Bibliotheken mit der Namenserweiterung ".LIB" und als Quick-Bibliotheken mit der Namenserweiterung ".QLB".

.QLB-Quick-Bibliotheken können innerhalb der QuickBASIC-Entwicklungsumgebung im Interpreter-Modus verwendet werden. Dabei ist jeweils immer nur eine Quick- Bibliothek einbindbar.
Eine oder meherer .LIB-Link-Bibliotheken können verwendet werden, wenn man direkt ausführbare EXE-Programme erstellen will.
 
Die meisten Bibliotheken, die man von Drittanbietern erwerben oder im Internet herunterladen kann, liegen sowohl als QLB-Quick-Bibliothek als auch als .LIB-Link-Bibliothek vor.
 
 
*** Übersicht: Wie binde ich eine Bibliothek in mein Programm ein?
Und wie bindest Du nun eine oder mehrere Bibliotheken in Dein Programm ein? Hierfür gibt es zwei Methoden:
- Eine - und nur eine - QuickLibrary Bibliothek kannst Du direkt über den Compileraufruf QB /L <Bibliotheksname>.QLB einbinden. Das .QLB kannst Du dabei auch weglassen, denn eine "Quick Library" muss immer die Dateierweiterung ".QLB" haben. Am Anfang Deines Programms musst Du die in der Bibliothek enthaltenen SUBs und FUNCTIONs deklarieren, meist durch "Includieren" (Einfügen ) der mit der Bibliothek mitgelieferten Deklarationsdatei, z.B. durch "REM INCLUDE <Includedateiname>.INC".
- Willst Du mehr als eine Bibliothek einbinden, so verwende das mit QuickBasic zusammen ausgelieferte eigenständige Bindeprogramm LINK.EXE. So ein Bindeprogramm wird auch ->
Linker genannt.
 
Aus einem beliebigen BAS-Programm kannst Du bequem eine eigene QuickLibrary erzeugen und zwar über den Menüpunkt "Ausführen -> Bibliothek erstellen" in der QuickBasic Entwicklungsumgebung .
 
 
 
*** Quick-Bibliotheken .QLB
Die Bibliotheken mit der Endung .QLB sind so genannte Quick-Bibliotheken (englisch "QuickLibraries"). Diese können innerhalb der QuickBASIC- Programmierumgebung vom QuickBASIC-Interpreter genutzt werden, wenn sie beim Laden von QB mitgeladen wurden. Das Laden erfolgt durch das Starten von QB.EXE mit dem Kommando "QB /L <Bibliotheksname>.QLB" . Dies ist eine super-praktische Sache und eine hervorstechende Fähigkeit von QuickBASIC gegenüber anderen BASIC-Dialekten! Es erleichtert enorm das Austesten von Programmen im Interpretermodus.
 
Allerdings kann immer nur eine Quick-Bibliothek (.QLB) mit dem Interpreter verwendet werden, im Gegensatz zu den "normalen" Link-Bibliotheken (.LIB). Man kann aber zwei Quick-Bibliotheken zu einer einzigen zusammenfassen. Siehe dazu den entsprechenden Beitrag.
 
Die aus der Bibliothek genutzten SUBs und FUNCTIONs müssen im Anwenderprogramm mit ihren Übergabeparametern korrekt deklariert werden. Um dem Anwender darin zu unterstützen, wird zusammen mit der Bibliothek häufig eine gleichnamige Quellsprache-Datei mit der Namenserweiterung .BI mitgeliefert. Die .BI-Datei lässt sich dann die per $INCLUDE Anweisung am Beginn des Programms mit
'$INCLUDE: 'bibliotheksname.BI'
 
einbinden und enthält alle erforderlichen DECLARE-Befehle.
 
Um innerhalb der QuickBASIC-Programmierumgebung aus einer geladenen BAS-Datei eine Quick-Bibliothek zu erzeugen verwendest Du den Menüpunkt "Ausführen | Bibliothek erstellen..." bzw. "Run | Make Library...". Bei dieser Gelegenheit wird automaitsch auch gleich eine Link-Bibliothek gleichen Namens mit der Namenserweiterung .LIB erzeugt.
 
Du kannst eine Quick-Bibliothek aber auch außerhalb der Entwicklungsumgebung mit Hilfe des QuickBASIC-Linkers LINK.EXE erstellen, wobei auch immer das Runtime- Modul BQL45.EXE mit eingebunden werden muss (der Name gilt für QB 4.5 bei anderen QB- Versionen heißt das Runtime-Modul anders).
 
Um beispielsweise eine Quick-Library namens MIXED.QLB zu erzeugen, die die kompilierten Objektmodule PANEL.OBJ und COPYBLOCK.OBJ enthält, musst Du den Linker mit folgender Kommandozeile aufrufen:
LINK /QU PANEL COPYBLOCK, MIXED.QLB,, BQLB45.LIB;

Der Schalter /QU weist den Linker an, eine Quick-Bibliothek statt eines Objektprogramms zu erzeugen. Das Runtime-Modul BQLB45.LIB muss sich im aktuellen Verzeichnis befinden.
 
Willst Du dann ein Hauptprogramm MAINPROG.BAS gemeinsam mit der erstellten Quick-Bibliothek MIXED.QLB laden, so musst Du die QuickBASIC-Entwicklungsumgebung mit folgender Kommandozeile aufrufen:
QB MAINPROG.BAS /L MIXED.QLB
 
Um ein in Verbindung mit einer .QLB-Quick-Bibliothek lauffähiges Programm kompilieren zu können, muss zusätzlich eine Link-Bibliothek gleichen Namens mit der Endung .LIB vorhanden sein. Diese Bibliotheken werden vom Linker in das Programm eingebunden.
 
QLB-Bibliotheken sind meist nur in Verbindung mit der Compilerversion lauffähig, mit der sie erzeugt wurden. So ist eine QLB-Bibliothek, die mit der englischen Version von QuickBASIC 4.5 erzeugt wurde, oftmals nicht unter der deutschen Version und unter QuickBASIC 7.1/PDS lauffähig.
 
Wie Du aus einer LIB- eine QLB-Bibliothek erzeugen kannst, erfährst Du weiter oben im vorliegenden Eintrag .
 
Im Lieferumfang der QuickBASIC-Entwicklungsumgebung befinden sich die beiden Bibliotheken QB.QLB und QB.LIB. Mit diesen Bibliotheken lassen sich Zugriffe auf das DOS-Betriebssystem und auf die BIOS-Funktionen programmieren. Dazu dienen die Befehle CALL ABSOLUTE, CALL INTERRUPT und CALL INTERRUPTX. Bei Programmen, die diese Befehle verwenden, z.B. bei einigen Mausroutinen, muss QuickBASIC mit dem Kommando "QB /L" gestartet werden. Der häufigste Anfängerfehler besteht darin, das "/L" wegzulassen. Das hat gelegentlich zur Folge, dass ein Programm, das unter QBasic problemlos läuft, sich unter QuickBASIC ums Verrecken nicht starten lässt.
 
Wenn Du genau wissen willst, was ein "Objektprogramm" ist, das schlage diesen Begriff im LEXIKON nach.
 
 
*** Link-Bibliotheken .LIB
Link-Bibliotheken können in eigenständige kompilierte EXE-Programme eingebunden werden und lassen sich nicht innerhalb der QuickBASIC-Entwicklungsumgebung im Interpretermodus verwenden.
 
Zur Erstellung von Link-Bibliotheken aus Objekt-Dateien wird der Library Manager LIB.EXE eingesetzt. Eine Objektdatei .OBJ entsteht beim Kompilieren einer BAS- Datei. Zusätzlich zur LIB-Datei erzeugt LIB.EXE eine gleichnamige .CAT-Datei, in der interessante Zusatzinformationen wie Modulnamen, Offset und Größe des Code- und Datenbereichs usw. aufgeführt sind.
 
Um eine oder mehrere Link-Bibliotheken zu einem Hauptprogramm-Objektmodul hinzuzubinden und daraus eine EXE-Dtei zu erzeugen, verwendet man den QuickBASIC-Linker LINK.EXE. Dabei werden nur diejenigen SUBs und FUNCTIONs eingebunden, die im Hauptmodul deklariert sind. Das hilft enorm, kostbaren Programmspeicher zu sparen.
 
Um beispielsweise eine Link-Library namens MIXED.LIB zu erzeugen, die die kompilierten Objektmodule PANEL.OBJ und COPYBLOCK.OBJ enthält, musst Du den Library Manager mit folgender Kommandozeile aufrufen:
LIB MIXED.LIB + PANEL + COPYBLOCK, MIXED.CAT
 
Das Kompilieren der Bibliotheks-Quellsprachedateien MIXED.BAS und COPYBLOCK.BAS zu Objekt-Dateien erfolgt vorher entweder innerhalb der Entwicklungsumgebung oder mit dem externen Compiler BC.EXE.
 
Der Library Manager LIB.EXE kann übrigens nicht nur neue Bibliotheken erzeugen, sondern auch zu vorhandenen Bibliotheken zusätzliche SUB/FUNCTIONs hinzufügen, SUB/FUNCTIONs austauschen, vorhandene SUB/FUNCTONs löschen usw.
 
Um die erstellte Bibliothek MIXED.LIB nun zu einem Hauptprogramm MAINPROG.BAS hinzuzubinden, kompilierst Du das Hauptprogramm zunächst außerhalb der QB- Entwicklungsumgebung mit dem externen Kommandozeilen-Compiler BC.EXE über folgendes Kommando zu einem Objektprogramm MAINPROG.OBJ.
BC MAINPROG.BAS
 
Dann rufst Du den Linker mit folgender Befehlszeile auf:
LINK MAINPROG,,,MIXED.LIB

*** Beispiel für das Erzeugen und Einbinden einer .LIB-Bibliothek
An einem konkreten Programmmierbeispiel will ich Dir nun den Umgang mit einer Link-Bibliothek demonstrieren.
Alle genannten Dateien (TABELLE.BAS, HOCH2.BAS, BIBLIO.BAT und MIXED.LIB) stehen im ZIP-Archiv Progs\lib.zip zur Verfügung sowie online unter www.antonis.de/faq/progs/lib.zip .
 
Das Hauptprogramm TABELLE.BAS zeigt die Quadratzahlen von 0 bis 16 an und sieht folgendermaßen aus:
 
'TABELLE.BAS
'von Thomas Antoni, 23.8.02
DECLARE FUNCTION hoch2 (a)
CLS
FOR i = 0 TO 16
PRINT hoch2(i)
NEXT
SLEEP
 
Das von TABELLE.BAS verwendete Unterprogramm hoch2() befindet sich in einer zweiten Datei namens HOCH2.BAS, die folgenden Inhalt hat:
 
'HOCH2.BAS
'von Thomas Antoni, 23.8.02
DECLARE FUNCTION hoch2 (a)
FUNCTION hoch2 (a)
hoch2 = 2 ^ a
END FUNCTION
 
Es gibt zwei Möglichkeiten, um aus der Quellsprachedatei HOCH2.BAS eine Bibliothek MIXED.LIB zu erzeugen, diese zum Hauptprogramm TABELLE.BAS hinzuzubinden und aus dem Ganzen letztendlich eine EXE-Datei TABELLE.EXE zu erzeugen.
 

Möglichkeit 1 - EXE erstellen innerhalb der QB-Entwicklungsumgebung
1. Du lädst zunächst die Bibliotheks-Quellsprachedatei HOCH2.BAS in die
Entwicklungsumgebung
2. Über den Menüpunkt "Ausführen | Bibliothek erstellen | mixed" erzeugst
Du die Quick-Bibliothek MIXED.QLB und die Link-Bibliothek MIXED.LIB.
3. Du beendest die Entwicklungsumgebung und startest sie erneut mit
"QB /L mixed"
4. Nun lädst Du das das Hauptprogramm TABELLE.BAS und erstelltst das
EXE-Programm über "Ausführen | Exe-Datei erstellen"
 

Möglichkeit 2 - EXE erstellen außerhalb der QB-Entwicklungsumgebung
Für diese Variante verwendest Du statt der Entwicklungsumgebung QB.EXE den externen Library Manager LIB.EXE und den externen Linker LINK.EXE. Hierzu kannst Du die folgenden in der Batchdatei BIBLIO.BAT hinterlegten Kommandos verwenden:
 
@echo off
REM Demo zum Erzeugen und Einbinden einer Link-Bibliothek mit QuickBASIC 4.5
REM =========================================================================
REM Diese Batch-Datei erstellt aus der Quellsprachedatei hoch2.bas die
REM Link-Bibliothek mixed.lib, bindet sie zum Hauptprogramm tabelle.bas
REM hinzu und erzeugt hieraus das ausführbare Programm tabelle.exe.
REM Alle Fragen des externen Compilers BC.EXE des Library managers LIB.EXE
REM und des Linkers LINK.EXE können mit der Eingabetaste quittieren werden.
REM (c) Thomas Antoni, 26.12.2005 - 27.12.2005
REM
REM --- Objektdatei hoch2.obj erstellen (/O erstellt ein eigenständige EXE
REM --- ohne dass die Runtime-Modul BRUN45.EXE erforderlich ist):
BC hoch2.bas
REM --- Bibliothek mixed.lib aus der Objektdatei hoch2.obj erstellen:
LIB mixed.lib + hoch2
REM --- Objektdatei tabelle.obj aus dem Hauptprogramm tabelle.bas erstellen:
BC /O tabelle.bas
REM --- Aus der Bibliothek mixed.lib zum Hauptprogramm tabelle.obj hinzubinden...
REM --- und die ausführbare Datei tabelle.exe erzeugen
LINK tabelle,,,mixed.lib
 
Alle genannten Dateien (TABELLE.BAS, HOCH2.BAS, BIBLIO.BAT und MIXED.LIB) stehen im ZIP-Archiv Progs\lib.zip zur Verfügung sowie online unter www.antonis.de/faq/progs/lib.zip .
 
Um die Batchdatei ablaufen zu lassen, kopierst Du am besten die 3 Dateien HOCH2.BAS, TABELLE.BAS und BIBLIO.BAT ins QuickBASIC-Programmverzeichnis und startest dort BIBLIO.BAT.
 
Anmerkung: Die recht komplizierten Kommandozeilenparameter des Linkers und des Library Managers sind leider in der QuickBASIC-Onlinehilfe nicht aufgeführt. Man ist bei deren Anwendung also auf das offizielle QuickBASIC-Handbuch oder ein anderes Buch angewiesen.
 
 

Antwort 3
~~~~~~~~~
[ von Ch@rly ( karlpircher*hotmail.com ), im QB-Forum, 23.8.2002 ]
 
*** Wann verwendet man eine QLB- und wann eine LIB-Bibliothek?
Die QLB Datei wird im interpretierten Modus verwendet, die LIB wird beim Linken in die EXE eingebunden. Da QB in der Entwicklungsumgebung mit einer LIB nichts anfangen kann, hat Microsoft die QLB "erfunden", damit man Programme, welche LIBs verwenden auch in der Entwicklungsumgebung benutzen kann. LIBs und QLBs können nur
in den Compilerversionen von QB verwendet werden und dort auch nur ab der Version 4.x.
 
Man kann aus einer Lib ein QLB erstellen:
 
Erstellen einer QLB aus einer LIB
Link /q <LIB-Datei>,<ZielDatei>,,BQLB45.LIB für QB 4.5
Link /q <LIB-Datei>,<ZielDatei>,,QBXQLB.LIB für QBX (QB 7.1)
 
Das Programm Link und auch die benötigten BQLB45.LIB, bzw. QBXQLB.LIB sind bei der jeweiligen Version von QB enthalten.
 
Des weiteren kann man aus einer OBJ Datei sowohl ein LIB, als auch eine QLB erstellen. Zum Erstellen einer QLB gilt die selbe Syntax wie oben, nur daß anstatt der LIB Datei eine OBJ Datei verwendet wird.
 
Erstellen einer QLB aus einer OBJ -Datei:
Link /q <OBJ-Datei>,<ZielDatei>,,BQLB45.LIB für QB45
Link /q <OBJ-Datei>,<ZielDatei>,,QBXQLB.LIB für QBX (QB 7.1)
 
Es wird also nur an Stelle der LIB Datei eine OBJ Datei verwendet.
 
Erstellen einer LIB Datei aus einer OBJ Datei
LIB <ZielDatei> <QuellDatei>
 
Mit diesen Befehl wird aus einer OBJ Datei ein LIB Datei erstellt, bzw. der Zieldatei wird die Quelldatei hinzugefügt. Was heißt das ? Wenn die Zieldatei nicht existiert, so wird sie angelegt, wenn sie aber existiert, so wird der Name einer neuen Zieldatei abgefragt. Mit LIB hat man noch viele andere Möglichkeiten zur Verwaltung von LIB Dateien, auf diese möchte ich hier aber nicht weiter eingehen.
 
Am besten ist es also, wenn man eine OBJ Datei zur Verfügung hat, da man daraus sowohl die QLB als auch die LIB Datei erstellen kann.
 
 
*** Wie binde ich mehr als eine QLB in mein Programm ein
Man kann immer nur eine QLB zur selben verwenden. Wenn man entweder die entsprechenden OBJ-oder LIB- Dateien zur Verfügung hat, dann kann man daraus eine QLB Datei erstellen: Z.B:
Link /q <OBJ-Datei>+<LIB-Datei>,<ZielDatei>,,BQLB45.LIB für QB45
Link /q <OBJ-Datei>+<LIB-Datei>,<ZielDatei>,,QBXQLB.LIB für QBX (QB 7.1)
 
Dabei kann man so viele OBJ- und/oder LIB- Dateien zusammenfügen wie man will.
 
 
*** Wie binde ich mehr als eine LIB in mein Programm ein?
Theoretisch kann man ohne Probleme mehrere LIB Dateien verwenden. Wenn man allerdings aus QB heraus direkt kompilieren will, was ja der Normalfall ist, so sollte zu der QLB Datei eine entsprechende LIB Datei existieren. Diese kann man mit LIB erstellen, wenn man die einzelnen LIB oder OBJ Dateien besitzt.
LIB <ZielDatei> +<OBJ-Datei> +<LIB-Datei1> -<LIB-Datei2> ...
 
Auch hier gilt, daß man beliebig viele OBJ und/oder LIB Dateien zusammenfassen kann.
 
 
*** Was sind die Vor- und Nachteile bei der Verwendung von CHAIN-Modulen und LIBs/QLBs ?
LIBs/QLBs stellen im Prinzip Funktionen und Sub zur Verfügung. Dabei können diese bei LIBs in einer beliebigen Programmiersprache entwickelt worden sein. Dadurch hat man oft mächtige Funktionserweiterungen in QB. Ein klassisches Beispiel dafür ist die Future LIB.
 
Man kann aber auch in QB eigene QLB/Libs erstellen. Dazu einfach
beim Kompilieren anstatt "EXE" "Library" auswählen. Dann wird sowohl eine QLB, als auch eine LIB erstellt. Wenn man eigene Funktionen komplett ausgetestet hat, dann kann man sie ohne weiteres in LIB's auslagern. Dies hat den Vorteil, daß man sie auch in anderen Projekten weiterverwenden kann, ohne Sourcecode kopieren zu müssen. So lange die Funktionen aber noch nicht fertig ausprogrammiert und getestet sind, sollte man sie in Module auslagern. Dem allen gemeinsam ist, daß es sich immer um ein einziges Programm handelt, welches komplett im Speicher stehen muß.
 
Mit CHAIN kann man dagegen aus einem (Haupt-) Programm ein anderes aufrufen, wir haben es also mit 2 oder mehreren Programmen zu tun. Dies kann von Vorteil sein, wenn ein Programm so groß wird, daß es nicht mehr in den Speicher paßt.
 
 

Answer 4
~~~~~~~~~~~
[ by Isaac Grover (
isaac.grover*dinuba.com - www.psnw.com/~dinuba/basic/qb_faq.html ), April 15, 1997 ]
 
 
What are libraries, and how do I use them?
Libraries contains procedures which can be linked to
your QuickBasic programs. These procedures are often
written in a variety of different languages including
QuickBasic, C/C++, or assembly, because they would either
be too bulky in native QB code and/or faster in another
language.
For instance, let's say you had a library that played
audio CD's. Rather than trying to figure out the
details yourself, you could use the library's
procedures as if they were QuickBasic's built-in SUBs
or FUNCTIONs: OpenCD (), CloseCD (), PlayCD (), etc.
To use our fictitious library, called CD_LIB, we need both
a QuickBasic library (.QLB) and a linkable library (.LIB).
To use CD_LIB's functions in QuickBasic, we have to load
CD_LIB.QLB into QuickBasic so that we can use its functions
from within the IDE, and we do that by typing at the DOS
prompt:
 
QB progname /L CD_LIB
progname, being the .BAS program, is optional.
 
 

Answer 5
~~~~~~~~~~~
[ by lipha (
aliphax*hotmail.com - www.geocities.com/aliphax ]
 
Ok, all a library is, is a collection of subs and functions, along with variables that the subs and functions might need to use. (What subs and functions are, is another question) :-)
 
So the library packages all these subs and functions together, for easy distribution and such.
 
Where a library really shines though, is this. A library contains semi-compiled code, similar to what is inside an EXE file. Since routines for a library is turned into this semi-compiled code, that means that any language that is capable of creating a library you can use in QBasic. So if you turned a C++ routine into a library, then you could use it in QB. Libraries allow for mixed-language programs. People especially like to make libraries in the Assembly language, since it is so incredibly fast, though hard to program in.
 
To use a library, you simply go into DOS and type:
QB.EXE /L libraryname
 
where libraryname is the name of the .qlb file that should be included with the library (note the extention is not needed). Also note that some libraries (like Future.Library) have building programs to create the qlb file.
 
After you load the library on the command line, you need to include the appropiate DECLARE statements for the routines in the library. Most libraries have long lists of routines, so writing all the DECLARE statements would be tiresome. Therefore, most libraries have a .bi file, which contains all the DECLARE statements for the routines, so you don't have to write them over again. Now you can simply include them like so:
'$INCLUDE: 'bifile.bi'
 
At the beginning of the program.
 
 

[ The QBasic-MonsterFAQ --- Start Page: www.antonis.de/faq ]