首页 >后端开发 >C++ >为什么我在 Visual Studio 2010 中遇到'PinvokeStackImbalance”异常?

为什么我在 Visual Studio 2010 中遇到'PinvokeStackImbalance”异常?

Patricia Arquette
Patricia Arquette原创
2024-11-02 22:43:30283浏览

Why Am I Getting a

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn