加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C# – PInvoking C DLL时的AccessViolationException(cdecl调用

发布时间:2020-12-15 07:49:46 所属栏目:百科 来源:网络整理
导读:我花了一整天研究这个,而且我不是更聪明的: 我有一个C#DLL,PInvokes C DLL中的方法.在调试模式下编译时我没有遇到任何问题,但在Release模式下编译时,我得到一个AccessViolationException.谷歌搜索这个问题告诉我,它可能是不合规的调用约定的问题.现在代码在
我花了一整天研究这个,而且我不是更聪明的:

我有一个C#DLL,PInvokes C DLL中的方法.在调试模式下编译时我没有遇到任何问题,但在Release模式下编译时,我得到一个AccessViolationException.谷歌搜索这个问题告诉我,它可能是不合规的调用约定的问题.现在代码在C#中看起来像这样:

[return: MarshalAs(UnmanagedType.U1)]
[DllImport("Native.dll",CallingConvention = CallingConvention.Cdecl)]
internal static extern Boolean AMethod(Int32 mode,byte frame);

在C:

extern "C" {
     DLL_EXPORT bool AMethod(int mode,BYTE frame)
     {
      ...
     }
}

我已经在VS2010中使用__cdecl调用约定设置了C项目,但我仍然得到AccessViolationException,我不知道我还能做些什么.我应该注意我的C DLL使用第三方DLL,我不知道他们使用什么调用约定.

任何帮助,将不胜感激!

哦,我的开发机器上没有例外,只在我的目标系统上.

解决方法

尝试重新排序这些语句:
[DllImport("Native.dll",CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.U1)]
internal static extern Boolean AMethod(Int32 mode,byte frame);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读