我已经花了一整天的时间研究这个问题,但仍然无法理解:
我有一个C# DLL,其中PInvokes调用了一个C++ DLL中的方法。在Debug模式下编译时,我没有遇到任何问题,但在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)
{
...
}
}
我已将C++项目设置为在VS2010中使用__cdecl调用约定进行编译,但我仍然遇到AccessViolationException错误,并且不知道还能做什么。需要注意的是,我的C++ DLL使用第三方DLL,我不知道它们使用什么调用约定。
任何帮助将不胜感激!
哦,我在开发机上没有遇到异常,只有在目标系统上才会出现。
__cdecl
调用约定? - Frédéric HamidiDLL_EXPORT
宏展开后会得到什么? - Frédéric Hamidi