c# - Pinvoke C# : delegated function cause crash

标签 c# delegates pinvoke access-violation

我正在尝试使用下面的函数来映射数据到达时要调用的另一个函数。 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/

相关文章:

c# - System.IO.Directory.GetFiles。没有 GetFiles 的定义?

c# - C#获取磁盘簇大小--出现 'GetDiskFreeSpace'错误

C# - 有人能告诉我为什么以及在哪里应该使用委托(delegate)吗?

ios - 如何制作一个异步方法来处理来自委托(delegate)的数据?

C++:将函数分配给 tr1::function 对象

c# - 平台调用语句中 DLL 的相对路径

c# - 如何确定另一个应用程序的窗口是否可见?

c# - aspnet 核心 jwt token 作为获取参数

c# - 如何检查C#(控制台应用程序)中是否按下了按键

c# - System.Net.Http.Handlers.ProgressMessageHandler 立即返回 100%