Click to See Complete Forum and Search --> : Stack problem with setting callback in native code.


dlbriggs1729
June 19th, 2006, 11:22 AM
I have a 3th party dll writen in C. I have no problem calling most functions in the dll from the managed code. But there is a function that take a function pointer for setting a callback function that I am having problems with.
I have the following code:

First in a wrapper class


[DllImport("w32dll.dll")]
static void dllSetCallFp( void (*aFp)(void*) );

Then in seperate class.

delegate void funDelegate(void*);
typedef void (__cdecl *FUNPT)(void*);
funDelegate ^ fp = gcnew funDelegate(MFun);
pin_ptr<funDelegate^> pp = &fp;
IntPtr ip = Marshal::GetFunctionPointerForDelegate(fp);
FUNPT cb = static_cast<FUNPT>(ip.ToPointer());
Wrapper::dllSetCallFp(cb);

MFun is just a test function.

void Client::MFun(void* pV)
{
int i = 9;
}

The problem is I can debug into the calling of MFun but when I return I get the following errors
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.
Then
'FatalExecutionEngineError'

Can anyone help me with this?
-Thanks