7

我花了一整天的时间研究这个,我一点也不聪明:

我有一个 C# DLL,它在 C++ DLL 中调用一个方法。在调试模式下编译时我没有遇到任何问题,但是在发布模式下编译时我得到了一个 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)
     {
      ...
     }
}

我已经将 C++ 项目设置为使用 VS2010 中的 __cdecl 调用约定进行编译,但我仍然得到 AccessViolationException 并且我不知道我还能做什么。我应该注意我的 C++ DLL 使用第三方 DLL,我不知道他们使用什么调用约定。

任何帮助,将不胜感激!

哦,我没有在我的开发机器上遇到异常,只有在我的目标系统上。

4

1 回答 1

0

尝试重新排序语句:

[DllImport("Native.dll", CallingConvention = CallingConvention.Cdecl)]
[返回:MarshalAs(UnmanagedType.U1)]
internal static extern Boolean AMethod(Int32 mode, byte frame);
于 2011-05-09T18:58:46.647 回答