C++ DLL von VBA aus aufrufen

Moin, moin!

Ich habe eine in C (Visual Studio 2003) geschriebene Funktion, die ich von VBA aus ansprechen möchte. Das funktioniert so lange, wie ich keine Doubles übergebe:

In C:

KGERG32_API double GTest( )
{
return 42;
}

In VBA:

Private Declare Function GTest Lib „KGERG32.dll“ () As Double

Das funktioniert. Sobald ich aber einen Double als Parameter übergebe, kommt die Fehlermeldung „Falsche DLL-Aufrufkonvention“

Also so:

KGERG32_API double GTest( double p )
{
return 42;
}

Private Declare Function GTest Lib „KGERG32.dll“ (ByVal p As Double) As Double

Ich habe diverse Beispielprogramme im Web gesehen, wo das zu funktionieren scheint. Was mache ich falsch?

GrIngo

Wenn es wirklich nur an double liegt, kannst tu sie ja als object übergeben. Nur ein (object) voransetzen und anschliessend zurück wieder (double). Was auch sein kann ist das du vergessen hast beim der deklaration in VB anzugeben das die double übergeben werden soll.

Ich habe das Problem gelöst.

Die „Aufrufkonvention“ ist _stdcall
Bei manchen Compilern kann man das als Schlüsselwort vor die Funktionsdefinition setzen.
Der von mir verwendete Microsoft C+±Compiler sagt dazu aber „Anachronismus verwendet“ und ignoriert das.
Er will stattdessen eine weitere Compileroption: /Gz
Damit funktioniert es!

Ingo

http://www.ih-es.de