#If False Then
Private Declare Sub XX Lib "readme.txt" ()
Private Declare Sub XX Lib "datenbank\xyz.mdb" ()
Private Declare Sub XX Lib "..\xyz.hlp" ()
Private Declare Sub XX Lib "Win.INI" ()
Private Declare Sub XX Lib "c:\abc\def.dat" ()
Private Declare Sub XX Lib "xyz.reg" ()
Private Declare Sub XX Lib "xyz.DLL" ()
Private Declare Sub XX Lib "xyz.EXE" ()
' ...
#End If
Ahnen Sie, was hinter diesen Zeilen steckt? Offensichtlich ist,
dass die angeführten Dateien nicht im üblichen Sinne externe DLLs
sind, zu denen Funktionsaufrufe deklariert werden. Es handelt sich
viel mehr um diverse Dateien, wie sie immer wieder mit Anwendungen
zusätzlich ausgeliefert werden sollen. Anscheinend wird hier das
übliche Prinzip, Funktionsaufrufe aus externen DLLs zu deklarieren,
ein wenig zweckentfremdet.
Die Absicht ist, gleich von vornherein in einem Projekt dafür zu
sorgen, dass diese Dateien auch tatsächlich vom Paket- und
Weitergabe-Assistenten in das Setup-Paket mit aufgenommen werden.
Sie können solche Dateien zwar auch manuell in diesem Assistenten
in die Dateiliste einfügen. Die Gefahr ist jedoch groß, dass Sie
dabei eventuell die eine oder andere Datei vergessen.
Die Kompiler-Direktive "#If
False Then ... #End If" sorgt dafür, dass sich
sowohl Visual Basic als auch der Kompiler weder beim Testlauf in der
Entwicklungsumgebung noch beim Kompilieren eines Projekts als
ausführbare Datei an diesen Zeilen stören. Denn die Bedingung
"False" ist und bleibt eben falsch - nur wenn die
Auswertung in dieser Direktive wahr wäre, würde der Kompiler die
eingeschlossenen Zeilen berücksichtigen. So stört er sich nicht
einmal daran, das die deklarierten "Funktionen" alle
"XX" heißen, und dass er mit den Dateien selbst auch gar
nichts anzufangen wüsste.
Die Dateiangaben können Sie sogar einigermaßen flexibel
handhaben. Schauen wir uns einmal die obenstehenden Zeilen der Reihe
nach auf ihre Besonderheiten hin an.
Private Declare Sub XX Lib "readme.txt" ()
Eine einfache Dateiangabe wie hier sorgt dafür, dass eine Datei,
die sich im Projekt-Verzeichnis befindet (das ist das Verzeichnis,
das die .vbp-Datei enthält) eingebunden wird.
Private Declare Sub XX Lib "datenbank\xyz.mdb" ()
Die Pfadangabe "datenbank" ist relativ und besagt, dass
die einzubindende Datenbank-Datei xyz.mdb im unterhalb des
Projekt-Verzeichnisses liegenden Verzeichnis dieses Namens zu suchen
ist.
Private Declare Sub XX Lib "..\xyz.hlp" ()
Auch diese Pfadangabe ist relativ. Sie besagt, dass die
einzubindende Hilfe-Datei xyz.hlp im dem Projekt-Verzeichnis
übergeordneten Verzeichnis liegt.
Private Declare Sub XX Lib "Win.INI" ()
Sie werden wohl kaum die Win.INI-Datei Ihres Systems mit
ausliefern wollen. Aber dies ist ein Beispiel dafür, dass eben die
Win.INI-Datei aus Ihrem Windows-Verzeichnis eingebunden würde. Wird
nämlich eine Datei nicht anhand der Regeln zu den vorangegangenen
Beispielen gefunden, wird der übliche Suchpfad auf die
einzubindende Datei hin abgegrast. Zuerst wird das
Projekt-Verzeichnis durchsucht, dann der Umgebungs-Pfad von Visual
Basic (das VB98-Verzeichnis), dann die System-Verzeichnisse
(Windows, System usw.), und schließlich noch der eventuell in
Autoexec.bat eingestellte Umgebungspfad (Path). Wird die Datei nicht
gefunden, macht Sie der Assistent darauf aufmerksam und gibt Ihnen
die Möglichkeit, die Datei manuell zu suchen.
Private Declare Sub XX Lib "c:\abc\def.dat" ()
Sie können natürlich auch absolute Pfade angeben. Findet der
Assistent die angegebene Datei, fragt er Sie auch hier wieder.
Private Declare Sub XX Lib "xyz.reg" ()
Für die Suche nach einer Registrierungs-Datei gelten die
gleichen Regeln wie vor. Allerdings möchte ich Sie auf eine kleine
Besonderheit beim Einbinden von Registrierungs-Dateien aufmerksam
machen, auch wenn das nicht direkt mit dem Thema zu tun hat. Findet
der Assistent nämlich eine solche Datei in seiner Liste vor, bietet
er Ihnen die Option an, bei der späteren Ausführung des Setups den
Inhalt der Datei in die Registrierung nur aufzunehmen, die Datei nur
in das Zielsystem zu kopieren, oder beides.
Private Declare Sub XX Lib "xyz.DLL" ()
Private Declare Sub XX Lib "xyz.EXE" ()
Auf diese Weise können Sie beispielsweise zusätzliche
ActiveX-Server mitliefern, auch wenn Sie keinen Verweis auf diese in
Ihr Projekt aufgenommen haben (wenn diese etwa, aus welchem Grund
auch immer, nur per CreateObject geladen und spät gebunden werden
sollen) und der Assistent sie deswegen nicht und auch nicht anhand
der Datei-Abhängigkeiten finden kann. Oder es gibt zu Ihrer
Anwendung noch ein paar Extra-Tools (EXEs), die unbedingt mit
ausgeliefert werden sollen.
Eine Datei-Liste nach dem hier vorgestellten Prinzip können Sie
in jedes beliebige Modul einer Anwendung aufnehmen. Es müssen noch
nicht einmal Standard-Module sein. So können Sie auch beim
Einbinden von Modulen aus Ihrer Modul-Bibliothek dafür sorgen, dass
gegebenenfalls davon abhängige oder mitzuliefernde Dateien
automatisch präsent sein werden.
|