Visual Studio 2010 中的 PinvokeStackImbalance 问题
在 Visual Studio 2010 中,调用 C DLL 时经常遇到“pinvokestackimbalance”异常。此异常以前在 Visual Studio 2008 中禁用,现在在 VS2010 中默认启用,这阻碍了调试工作。
问题原因
代码:
<code class="csharp">[DllImport("ImageOperations.dll")] static extern void FasterFunction( [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, int inTotalSize, int inWindow, int inLevel);</code>
<code class="cpp">extern "C" { OPERATIONS_API void __cdecl FasterFunction(unsigned short* inArray, unsigned char* outRemappedImage, int inTotalSize, int inWindow, int inLevel); }</code>
问题在于不正确的调用约定。 DllImport 默认为 CallingConvention.WinApi,与 x86 桌面代码的 CallingConvention.StdCall 相同。但是,C 函数使用 __cdecl 调用约定,这是不同的。
解决方案
要解决此问题,可以按如下方式编辑 DllImport 行:
<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]</code>
这可确保使用正确的调用约定,解决“pinvokestackimbalance”异常。
以上是为什么我在 Visual Studio 2010 中遇到'PinvokeStackImbalance”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!