我正在尝试使用下面的函数来映射数据到达时要调用的另一个函数。
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)
{
}
}
答案 0 :(得分:4)
我希望这只是一个调用约定问题。您的C ++代码假定为cdecl,但C#代码假定为stdcall。只需在P / Invoke中指定cdecl,你应该是黄金。