Eigene dll dynamisch einbinden

06/01/2008 - 23:58 von Thomas Müller | Report spam
Hallo,

ich habe eine dll geschrieben. Dann habe ich eine exe geschrieben, die diese
dll nutzt. Wenn ich beide Dateien jetzt (ohne Setup) in ein anderes
Verzeichnis trage, findet die exe die dll nicht mehr. Gibt es da irgend
einen vernünftigen Ansatz? Z.B. dynamisch einbinden - also
createobject(app.path & "mydll") oder so àhnlich?

Vielen Dank im voraus,

Tom
 

Lesen sie die antworten

#1 Thorsten Albers
07/01/2008 - 00:39 | Warnen spam
Thomas Müller schrieb im Beitrag
<flrmrm$9mu$01$...
ich habe eine dll geschrieben. Dann habe ich eine exe geschrieben, die


diese
dll nutzt. Wenn ich beide Dateien jetzt (ohne Setup) in ein anderes
Verzeichnis trage, findet die exe die dll nicht mehr. Gibt es da irgend
einen vernünftigen Ansatz? Z.B. dynamisch einbinden - also
createobject(app.path & "mydll") oder so àhnlich?



Zunàchst einmal:
"Dynamisch" hat im Zusammenhang mit einer externen Bibliothek (DLL etc.)
nichts mit dem Pfad zu tun, in welchem die DLL gesucht wird, sondern
bezeichnet den Modus, in welchem die Bibliothek an die Anwendung etc.
gebunden wird.

Du meinst aber offensichtlich einen variablen Suchpfad gegenüber einem fest
kodierten. Das ist mit der Declare-Anweisung, über welche Du die DLL in
Deine Anwendung einbindest, durchaus möglich und extrem einfach: Einfach
keinerlei Pfadelemente bis auf den DLL-Dateinamen angeben! In diesem Fall
wird die DLL an den folgenden Stellen gesucht:
1. Verzeichnis der Anwendung (also App.Path).
2. Aktuelles Verzeichnis der Anwendung (also CurDir$()).
3. (Außer Win 9x): 32-Bit-Systemverzeichnis (z.B. C:\WINDOWS\SYSTEM32).
4. 16-Bit-Systemverzeichnis (z.B. C:\WINDOWS\SYSTEM).
5. Windows-Verzeichnis (z.B. C:\WINDOWS).
6. In der PATH-Umgebungsvariable angegebe Verzeichnisse.

Vgl. dazu LoadLibrary() und LoadLibraryEx().

Mit diesen beiden Funktionen kann man den Suchpfad auch selbst weiter
variabel gestalten:
- Declare-Anweisung, wie oben angegeben, ohne irgendwelche Pfadelemente bis
auf den Bibliotheks-Dateinamen gestalten;
- >>vor dem ersten Aufruf<< einer Funktion aus der externen Bibliothek
diese aus dem gewünschten Pfad mit LoadLibrary()/LoadLibraryEx() laden;
- >>nach dem letzten Aufruf<< einer Funktion aus der externen Bibliothek
diese wieder mit FreeLibrary() zum Entladen freigeben.

-
THORSTEN ALBERS Universitàt Freiburg
albers@
uni-freiburg.de
-

Ähnliche fragen