Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Eigene C++ DLL's in VBA benutzen

Meik / 2 Antworten / Baumansicht Nickles

Hallo!

Mit Begeisterung habe ich festgestellt, dass es möglich mit (V)C++ DLL-Dateien zu erstellen, auf deren Funktionen man dann mittles API mit VBA zugreifen kann. Das klappt bei mir zwar schon im Ansatz, leider scheitere ich aber im Moment daran, dass ich keine vernünftigen Werte-Übergaben machen kann. Als Beispiel:

Private Declare Function say_hello Lib "dll" (ByVal a As Integer) As Integer

Sub aMalFuenf()
Dim intc As Integer
intc = say_hello(5)
MsgBox intc
End Sub

Excel bringt die Fehlermeldung:

Laufzeitfehler \'49\': Falsche DLL-Aufrufkonvention
(mit Verweis auf die Zeile "intc = say_hello(5)"

Der entscheidende Abschnitt des C++-Quellcodes sieht so aus:

extern "C" __declspec(dllexport) int say_hello(int a)
{
int c;
c = a*5;
return(c);
}

Wenn mir jemand meinen Fehler zeigen oder mir ein vernünftiges Beispiel liefern könnte, an dem sich der Umgang mit DLL\'s studieren lässt, wäre ich sehr dankbar!

Gruß,
Meik

bei Antwort benachrichtigen
(Anonym) Meik „Eigene C++ DLL's in VBA benutzen“
Optionen

Wenn deine DLL-Datei DLL.dll heißt, dann musst du das auch so in den Quelltext reinschreiben. Also so:

Private Declare Function say_hello Lib "dll.dll" (ByVal a As Integer) As Integer

Nur bei der Betriebssystem API (gdi32, user32 usw.) kann man das .dll weglassen.

Frohes Neues!

Tobias Surmann
webmaster@vbDirectX.de
http://www.vbDirectX.de
Die Homepage für DirectX-Programmierung mit Visual Basic!

bei Antwort benachrichtigen
Meik Nachtrag zu: „Eigene C++ DLL's in VBA benutzen“
Optionen

Danke, aber leider war das nicht die Ursache meines Problems. Er erkennt die dll ja, weil diese in dem gleichen Verzeichnis wie die xl-Tabelle liegt. (Trotzdem habe ich das mit dem Umbenennen in "dll.dll" mal versucht).

Ich danke dir trotzdem um wünsche auch dir ein schönes neues Jahr!

Gruß,
Meik

bei Antwort benachrichtigen