Pinvoke C#:委托功能导致崩溃

时间:2011-03-09 15:47:26

标签: c# delegates pinvoke access-violation

我正在尝试使用下面的函数来映射数据到达时要调用的另一个函数。 C ++函数创建一个新的线程,在其中调用我的函数。它工作几秒钟,但后来我得到一个错误:(我已经“启用”非托管代码调试以查看此错误“) Unhandled exception at 0x7725158e in threadTest.exe: 0xC0000005: Access violation.

如果我从委托函数中删除IntPtr frameData一切正常,因此我怀疑我应该对委托类的声明做些什么来避免这种情况发生。

C#代码:

public delegate void HandlerFunction(IntPtr frameData);

[DllImport("Cortex_SDK.dll")]
public extern static int Cortex_SetDataHandlerFunc(HandlerFunction function);


-----
public class myClass
{
    static HandlerFunction myFunction = new HandlerFunction(threadFunction);
    public myClass()
    {
        Cortex.Cortex_SetDataHandlerFunc(myFunction);
    }

    private static void threadFunction(IntPtr FrameData)
    {
    }
}

1 个答案:

答案 0 :(得分:4)

我希望这只是一个调用约定问题。您的C ++代码假定为cdecl,但C#代码假定为stdcall。只需在P / Invoke中指定cdecl,你应该是黄金。