首页 > 后端开发 > C++ > 正文

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

Patricia Arquette
发布: 2024-11-02 22:43:30
原创
218 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板