我正在尝试使用下面的函数来映射数据到达时要调用的另一个函数。
C++ 函数创建一个新线程,将在其中调用我的函数。它工作了几秒钟,但然后我收到一个错误:(我已经打开“启用非托管代码调试以查看此错误”)
threadTest.exe 中 0x7725158e 处出现未处理的异常:0xC0000005:访问冲突。
如果我从委托(delegate)函数中删除 IntPtr frameData
,一切都会正常工作,因此我怀疑我应该对委托(delegate)类的声明做一些事情来避免这种情况发生。
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)
{
}
}
最佳答案
我认为这只是一个调用约定问题。您的 C++ 代码假定 cdecl,但 C# 代码假定 stdcall。只需在 P/Invoke 中指定 cdecl 即可。
关于c# - Pinvoke C# : delegated function cause crash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248266/