PInvoking C ++ DLL时出现AccessViolationException(cdecl调用约定问题?)

时间:2011-05-09 14:37:39

标签: c# c++ pinvoke access-violation cdecl

我花了一整天时间研究这个问题,而且我不是更聪明的人:

我有一个C#DLL,它在C ++ DLL中使用PInvokes方法。在调试模式下编译时我没有遇到任何问题,但在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,我不知道他们使用什么调用约定。

任何帮助将不胜感激!

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

1 个答案:

答案 0 :(得分:0)

尝试重新排序这些陈述:

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