Variablenübergabe an .dll



  • Hallo Leute,
    ich will ein VBA-Programm schreiben bei dem ich den "Rechenkern" in eine .dll auslagern möchte. Bisher habe ich nur mit Matlab gearbeitet. Was muss ich in VBA und C++ für die Übergabe der Variablen tun?
    Vielleicht könnt ihr mir hier ein Beispiel für die Übergabe einer Variable senden!?

    Vielen Dank schon mal im Voraus!

    Oliver



  • Wenn ich dich richtig verstanden hab, willst du eine VBA Applikation erstellen, die Funktionen aus einer DLL aufruft die du in C++ geschrieben hast oder?

    In ISO-C++ (ohne CLI) gibt es 2 Wege die ich kenne:

    1. Eine einfache Funktionsdll erstellen, in der du Funktionen programmierst, und mit einer .def-Datei die Funktionen nach ausen lieferst. Diese musst du dann in VBA mit einen "Private Declare {Funktion} from "dll"" einbinden um sie zu benutzen.

    2. Die andere sowie aufwendigere möglichkeit wäre über ATL eine richtige COM-Klasse zu erstellen, was aber ein bestimmtes Grundwissen benötigt. Diese Version müsste dann über Projekt->Verweise in VBA hinzugefügt werden und mann könnte dann die Klasse und ihre Funktionen direkt benutzen.

    Ob das ganze in C++/CLI anders ist kann ich dir leider nicht sagen, so weit bin ich noch nicht um das da getestet zu haben, bzw mich schlau zu machen.

    Mfg Marc-O



  • Hallo Marc, danke für deine Antwort! Die Schnittstelle auf VBA-Seite habe ich mit der Private Declare {Funktion} from "dll"" hergestellt. Nur habe ich noch Schwierigkeiten mit der c++-Seite.
    In die .h-Datei habe ich bisher folgendes geschrieben:
    DLL_EXPORT double z (double x, double y);

    was muss ich alles in das main-file schreiben, wenn ich einfach nur die Summe von x & y berechnen möchte? Das kompilieren funktioniert nicht 😞

    Vielen Dank

    Oliver



  • Das kompilieren funktioniert nicht

    Poste bitte die exakte Fehlermeldung.



  • In der main, benötigst du zum einen eine Einsprungfunktion, mit dem Namen DllMain (Rückgabewert: BOOL APIENTRY) und den Parameter:

    HANDLE hModule
    DWORD ul_reason_for_call -> das kann einer dieser Wert sein: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH, DLL_PROCESS_DETACH
    LPVOID lpReserved

    Die funktionen selber müssen dies vorrangestellt sein: __declspec(dllexport) (sollte dien DLL_EXPORT sein).

    und wie gesagt desweiteren brauchst du eine def-Datei dessen Aufbau so ausschaut:

    // SampleDLL.def
    //
    LIBRARY "MyDll"
    
    EXPORTS
      z
    

    Desweiteren gibt es hier eine gute Seite die es dir von Grund auf erklärt. Ist aber soweit ich gesehen hab alles ISO-C++. Aber vllt Hilfts dir ja trotzdem.

    Mfg Marc-O


Anmelden zum Antworten