我花了一整天研究这个,而且我不是更聪明的:
我有一个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);
原文地址:https://www.jb51.cc/csharp/99616.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。