VBA DLL einbinden und Functionen aus Klassen nutzen

  • Sonstige

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Mono.

    VBA DLL einbinden und Functionen aus Klassen nutzen

    Hallo Ihr Spezialisten,

    ich habe kurzum wieder ein Problem bei dem ich keinerlei Lösung finden kann und ich hoffe Ihr könnt mir etwas helfen.

    Folgende Problematik.

    Eine unserer Fachabteilungen hat eine DLL via VB erstellt über die teilweise unserer Software funktioniert.

    Wir hatten bis jetzt um die dll nutzen zu können ein Programm auch in Visual Basic erstellt. Das jetzige Ziel ist allerdings Macros direkt aus der VBA Schnittstelle in unserem Programm zu erstellen. Dabei stellen sich ein paar Probleme. 1. Ich kann auf Grund fehlender Admin Rechte die dll nicht ins Windows-System integrieren. Sprich Sie ist nicht in der Registry enthalten sondern liegt nur lokal in einem Ordner.

    Um darauf zugreifen zu können wollte ich nun via Hardcode in VBA auf die DLL zugreifen. Dazu habe ich einfach jetzt mal einen Test zur DLL geschrieben und dessen Funktion darin.

    Visual Basic-Quellcode

    1. Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
    2. Declare PtrSafe Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
    3. Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
    4. Sub CATMain()
    5. '--------------------Test DLL Einbinden Classe finden
    6. Dim Msg As String
    7. Dim hLib As Boolean
    8. Dim pProc As Boolean
    9. hLib = LoadLibrary("c:\tmp\Debug\Meine.dll")
    10. If hLib = 0 Then Msg = "Keine passende DLL gefunden"
    11. If hLib <> 0 Then
    12. pProc = GetProcAddress(ByVal hLib, "Info")
    13. If pProc = 0 Then Msg = "Gewünschte Funktion wird nicht unterstützt!"
    14. FreeLibrary hLib
    15. End If
    16. MsgBox Msg


    Problem ist nun folgendes. Die DLL beinhaltet einen Aufbau in Klassen. Sprich Klasse1 hat Funktionen hinterlegt und Klasse2 wieder andere.

    Ich bekomme es via VBA nicht hin die Funktionen innerhalb einer Klasse aufzurufen.

    Auch die Alias Deklaration wie diese gehen nicht.

    Visual Basic-Quellcode

    1. Private Declare PtrSafe Function Information Lib "c:\tmp\Debug\Meine.dll" Alias "Info" () As String


    Andere DLL's welche direkt in der Registry enthalten sind gehen. Wer kann mir evtl. sagen wie ich auf Funktionen in Klassen zugreifen kann.
    Ist es eine ActiveX DLL? Also die du eigentlich über regsvr32.exe registrieren müsstest?

    Das Declare geht meines Wissens nur für (globale) Funktionen, die in der DLL als "dllexport" gekennzeichnet sind.
    Das ist meine Signatur und sie wird wunderbar sein!