Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

DLL-Funktion dynamisch aufrufen

DLL-Funktion dynamisch aufrufen
06.01.2008 20:41:06
Volti
Hallo zusammen,
hier mal 'ne Frage an die VBA-Profis.
Ich habe mit einer anderen Programmiersprache zeitoptimierte Funktionen geschrieben und in eine DLL gepackt. Der Aufruf und die Verwertung der Ergebnisse soll von Excel erfolgen.
"Early Binding" wie nachfolgend angegeben funktioniert super:

Declare Function Hauptprogramm Lib "C:\PIV_ADD\PIV_Create.DLL" (Options As String) As Long
Sub blabla()
Ergebnis = Hauptprogramm("meine Übergaben")
End Sub


Nun ist die DLL aber ggf. beim User nicht vorhanden oder in anderen Ordnern zu finden, so dass ich lieber auf "Late Binding" gehen möchte, wobei ich vorher testen kann, ob und wo die DLL vorhanden ist und die Funktion exportiert ist.
Hierzu folgender Code:


Sub blabla()
Lokal = "C:\PIV_ADD\"
Net="\\c4dehihhh01g002.irb.t-com.net\40044-PIV_ADD$\"
hLib = LoadLibrary(Lokal & "PIV_Create.dll")
If hLib = 0 Then
hLib = LoadLibrary(Net & "PIV_Create.dll")
If hLib = 0 Then Msg = "Keine passende DLL gefunden" : EXIT Sub
End If
If hLib  0 Then
pProc = GetProcAddress(ByVal hLib, "Hauptprogramm")
If pProc  0 Then
Call CodePtr(pProc)  ?
End If
FreeLibrary hLib
End If
End Sub


Leider scheitert mein Vorgehen beim Versuch, die von "GetProcAddress" zurückgegebene Adresse aufzurufen. Die mir von anderen Programmierspachen bekannten Methoden incl. Parameterübergaben funktionieren hier leider alle nicht. Außerdem muss ja auch hier noch der Parameter übergeben werden.
Hat da jemand eine Idee?

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: DLL-Funktion dynamisch aufrufen
06.01.2008 23:28:24
Horst
Hi,
deine Sub ist kein VBA-Code.
mfg Horst

AW: DLL-Funktion dynamisch aufrufen
07.01.2008 19:57:13
Volti
Hallo Horst,
danke für Deine Rückmeldung.
Der von mir angegebene Codeschnipsel enthält in der Tat einige Windows-API-Funktionen, so dass der Eindruck entstehen kann. dass es kein VBA ist. Außer IF und THEN ist nicht viel zu sehen :-)
Allerdings wird das ganze als kleiner Teilcode innerhalb meiner VBA -Excelumgebung eingesetzt. VBA unterstützt ja auch die komplette API, bis auf den Call-Befehl auch die obigen Befehle und um den geht es eigentlich.
Bleibt immer noch die Frage, wie kann ich eine Funktion in einer externen Datei (EXE,DLL) dergestalt aufrufen, dass ich vorher prüfen kann, wo sich die DLL-Datei befindet und evtl. ob die gewünschte Funktion darin vorhanden ist. Dieses Problem stellt sich bei Window-Funktionen nicht, da diese DLL's ja immer im Windows-Ordner vorhanden sind.

Anzeige
AW: DLL-Funktion dynamisch aufrufen
07.01.2008 20:19:00
Hans
Nach meinem Kenntnisstand ist das in der von DIr angedachten Weise nicht lösbar....
Einsprung DLLs via Declare ohne Pfadangabe einbinden.
Vor Aufruf die Pfadhierarchie von Declare nach der DLL durchsuchen und die DLL dort hin kopieren, wo Sie von Declare gefunden wird und damit auch geladen werden kann...
Gruß HW

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige