E
Ed
Suppose I want a function a pointer to which is going to
be passed to another function to use __stdcall conventions.
That is, I want the call to cbFunc() in tryCB3() to be compiled
for __stdcall calling conventions. What is the syntax?
I tried placing __stdcall in front of the (*cbFunc) but it is rejected
by the compiler.
long __stdcall tryCB3(long n, long (*cbFunc)(long m))
{
long r;
r = cbFunc(n); // call back
return r;
}
As background, the tryCB3() is going to be placed in a DLL
and called from Visual Basic, and the callback function is
going to be written in VB. The documentation indicates that
the call back function must use stdcall, but does not
tell be how to make the VC++ compiler make it that way.
The following is the VB code:
Private Declare Function tryCB3 Lib "SparkExUtilsDll.dll" _
(ByVal n As Long, ByVal theFunct As Any) As Long
Public Function theCBFunc3(ByVal m As Long) As Long
Debug.Print "In theCBFunc3"
theCBFunc3 = m * m
End Function
Public Function tryCBDrv3()
Dim n As Long
Dim q As Long
n = 2
q = tryCB3(2, AddressOf theCBFunc3)
Debug.Print "n= " & CStr(n)
Debug.Print "q= " & CStr(q)
End Function
When I step through tryCB3Drv it calls tryCB3, and then steps through
theCBFunc3, all working as expected, but then crashes with a C++
error dialog saying the ESP was not preserved through a function call etc.
Note that the it works without crashing if the callback function
has no arguments, so it must be some problem with the way VBA is setting
up the argument to theCBFunc3, vs. the way it's declared in C++.
Any ideas?
TIA
Ed
be passed to another function to use __stdcall conventions.
That is, I want the call to cbFunc() in tryCB3() to be compiled
for __stdcall calling conventions. What is the syntax?
I tried placing __stdcall in front of the (*cbFunc) but it is rejected
by the compiler.
long __stdcall tryCB3(long n, long (*cbFunc)(long m))
{
long r;
r = cbFunc(n); // call back
return r;
}
As background, the tryCB3() is going to be placed in a DLL
and called from Visual Basic, and the callback function is
going to be written in VB. The documentation indicates that
the call back function must use stdcall, but does not
tell be how to make the VC++ compiler make it that way.
The following is the VB code:
Private Declare Function tryCB3 Lib "SparkExUtilsDll.dll" _
(ByVal n As Long, ByVal theFunct As Any) As Long
Public Function theCBFunc3(ByVal m As Long) As Long
Debug.Print "In theCBFunc3"
theCBFunc3 = m * m
End Function
Public Function tryCBDrv3()
Dim n As Long
Dim q As Long
n = 2
q = tryCB3(2, AddressOf theCBFunc3)
Debug.Print "n= " & CStr(n)
Debug.Print "q= " & CStr(q)
End Function
When I step through tryCB3Drv it calls tryCB3, and then steps through
theCBFunc3, all working as expected, but then crashes with a C++
error dialog saying the ESP was not preserved through a function call etc.
Note that the it works without crashing if the callback function
has no arguments, so it must be some problem with the way VBA is setting
up the argument to theCBFunc3, vs. the way it's declared in C++.
Any ideas?
TIA
Ed