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 lpReservedDie 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