Eine DLL für VBA schreiben.
-
Hallo,
ich möchte mit dem C++Builder 6 Prof. eine DLL für VBA (VisualBasic for Applications) schreiben.
Mein Problem ist, daß VBA immer sagt, "DLL-Einsprungspunkt ShowMe in ...List.DLL nicht gefunden".in der DLL habe ich ShowMe so definiert:
"Hpp"
void _stdcall ShowMe();
Wie mache ich diese Funktion für VBA sichtbar?
Gruß Mario
-
in der Headerdatei:
#ifdef __DLL__ #define EXP_IMP __declspec(dllexport) #endif // __DLL__ #ifndef __DLL__ #define EXP_IMP __declspec(dllimport) #endif // NOT __DLL__ extern "C" EXP_IMP __stdcall int ShowMe(int i);
in der CppDatei:
// Testfunktion int __stdcall ShowMe(int i) { MessageBox (Null,"Test","TestCaption",MB_OK); return i + 2; }
Deklaration in der VBA-Datei
Public Declare Function ShowMe Lib "Test.dll" (ByVal i As Integer) As Integer
Aufruf im VBA-Code
MsgBox Str$(ShowMe(2))
Gruß Mario
-
Hallo,
die Funktion ShowMe(2) gibt den richtigen Wert (4) zurück, jedoch die
MessageBox wird nicht angezeigt.Warum?
Gruß Mario
-
Hallo,
wiedermal ein Problem mit der DLL, naja eigendlich mit VBA <-> CPPB.
Ich muß auch etliches an Daten hin- und herschaufeln.
Man kann doch nicht einfach eine Struct festlegen, oder etwa doch?Gruß Mario
PS: Die MessageBox erscheint immer noch nicht, jedoch Dialoge und
Formulare werden ordentlich angezeigt.
-
Bei mir sieht das eigentlich so aus:
Die Header-Datei lasse ich in Ruhe.
In der cpp steht:
extern "C" __declspec(dllexport)int ShowMe(int i);
In den Project Options steht bei Advanced Compiler unter Calling Convetions Standard Call.
Das klappt gut mit VB und VBA, aus MessageBoxen werden angezeigt.