Visual Studio 2010 中出现 PinvokeStackImbalance 错误
问题:
升级到 Visual Studio 2010 后,用户在从 C# 应用程序调用 C DLL 时遇到持续的“pinvokestackimbalance”异常。 Visual Studio 2008 中不存在此异常。
答案:
此异常是由于托管调试助手 (MDA) 的默认行为发生更改而导致的Visual Studio 2010。要解决此问题,请考虑以下步骤:
更正调用约定:
异常的主要原因是调用约定设置不正确。在 Visual Studio 2010 中,DllImport 的默认调用约定是 CallingConvention.WinApi,这相当于 x86 桌面应用程序的 CallingConvention.StdCall。但是,本例中的 C DLL 需要 Cdecl 调用约定。
要更正此问题,请编辑 C# 代码中的 [DllImport] 属性以显式指定 CallingConvention.Cdecl。
<code class="cs">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, int inTotalSize, int inWindow, int inLevel);</code>
禁用 PinvokeStackImbalance MDA:
可以在 Visual Studio 的调试设置中禁用 PinvokeStackImbalance MDA,以防止其干扰其他调试任务。
其他注意事项:
以上是为什么从 C# 调用 C DLL 时在 Visual Studio 2010 中出现“PinvokeStackImbalance”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!