Re: Stack prob. Setting callback in native dll.



You may want to set the calling convention if it is not the default
WINAPI( StdCall ):

[DllImport("w32dll.dll", CallingConvention=CallingConvention.Cdecl)]
static void dllSetCallFp( void (*aFp)(void*) );


<dlbriggs1729@xxxxxxxxx> wrote in message
news:1150837798.880414.310440@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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 ( *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'



.



Relevant Pages

  • Re: C3395: __declspec(dllexport) and __clrcall incompatible
    ... > und later shall be used by a plain MFC Project. ... > void SetText; ... functions have a native calling convention - ... Some managed functions have the calling convention __clrcall (not because ...
    (microsoft.public.dotnet.languages.vc)
  • Re: Stack prob. Setting callback in native dll.
    ... static void dllSetCallFp(void (*aFp)); ... The problem is I can debug into the calling of MFun but when I return I ... with a different calling convention. ...
    (microsoft.public.dotnet.framework.interop)
  • Re: Comments please
    ... > void myfunc(int, int); ... > void myfunc{ ... there is no intervening sequence point, ... The only "calling convention" the C language has is that the arguments to ...
    (comp.lang.c)
  • Re: Comments please
    ... > time about the C calling convention. ... > void myfunc(int, int); ... > void myfunc{ ...
    (comp.lang.c)
  • chkesp.c line 42 runtime error?
    ... usually a result of calling a function declared with one calling convention ... If I step into ct.func2I end up in void ZBase::Snapshot ... and when I return from snapshot() I get the above error. ... Ralph ...
    (microsoft.public.vstudio.development)