DLL in Unterverzeichnis

09/09/2008 - 14:14 von Georg Höfler | Report spam
Hallo NG,

normalerweise werden 'nicht' AktiveX DLL's ja mittels

Declare Function XXX Lib "XXX.dll" _
(Parameter) As Rueckgabewert

eingebunden. Die DLL muss dabei im Ausführungsverzeichnis oder im
Suchpfad (PATH) liegen. Ist es möglich eine solche DLL auch zu laden,
wenn Sie in einem Unterverzeichnis z.B. "<app.path>\dll\" liegt?

Eine Deklaration in der Art:

Declare Function XXX Lib "dll\XXX.dll" _
(Parameter) As Rueckgabewert

funktioniert ja leider nicht.


Vielen Dank schon mal,

Georg
 

Lesen sie die antworten

#1 Thorsten Doerfler
09/09/2008 - 14:46 | Warnen spam
Georg Höfler schrieb:
normalerweise werden 'nicht' AktiveX DLL's ja mittels

Declare Function XXX Lib "XXX.dll" _
(Parameter) As Rueckgabewert

eingebunden. Die DLL muss dabei im Ausführungsverzeichnis oder im
Suchpfad (PATH) liegen. Ist es möglich eine solche DLL auch zu laden,
wenn Sie in einem Unterverzeichnis z.B. "<app.path>\dll\" liegt?



- Man setzt das aktuelle Verzeichnis vor dem ersten Aufruf dieser DLL
auf das Verzeichnis, das die DLL enthàlt (ChDrive/ChDir).

Bsp.
' Deklaration

' Funktionen der Fremd-Dll:
Private Declare Function DllFunction Lib "dllname.dll" () As Long


' Aufruf:
Dim lPath As String

lPath = "C:\Programme\DllPfad"
ChDrive lPath: ChDir lPath

Debug.Print DllFunction() ' Aufruf einer Funktion der Fremd-Dll

Ist aber eher nicht zu empfehlen.

- Den Pfad der DLL tràgt man in der Umgebungsvariablen %PATH% ein.
Ebenfalls nicht empfehlenswert.

- Den Pfad der DLL tràgt man im Wert "Path" in der Registry unterhalb
von:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\ExeName.exe
ein.

- Man làdt die DLL zuvor mittels LoadLibrary(). Bei Nutzung von
LoadLibrary() kann zur Laufzeit dynamisch ein beliebiger Pfad
ermittelt werden und die DLL in den Speicher geladen werden.
Befindet sie sich einmal dort, wird diese Version verwendet, ein
genauer, fester Pfad muss beim Declare nicht angegeben werden.

Bsp.
' Deklaration

' Funktionen der Fremd-Dll:
Private Declare Function DllFunction Lib "dllname.dll" () As Long

' Win API:
Private Declare Function LoadLibrary Lib "kernel32" _
Alias "LoadLibraryA" ( _
ByVal lpLibFileName As String _
) As Long

Private Declare Function FreeLibrary Lib "kernel32" ( _
ByVal hLibModule As Long _
) As Long

Private hDllName As Long ' Modul-Handle der Fremd-Dll

Private Sub Form_Load()
' Fremd-Dll laden
hDllName = LoadLibrary("C:\Programme\DllPfad\dllname.dll")
End Sub

Private Sub Command1_Click()
Debug.Print DllFunction() ' Aufruf einer Funktion der Fremd-Dll
End Sub

Private Sub Form_Unload(Cancel As Integer)
FreeLibrary hDllName ' Fremd-Dll entladen
End Sub
'

Würde ich persönlich bevorzugen.

Thorsten Dörfler
Microsoft MVP Visual Basic

vb-hellfire visual basic faq | vb-hellfire - einfach anders
http://vb-faq.de/ | http://www.vb-hellfire.de/

Ähnliche fragen