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

如何修复VS2010中的PinvokeStackImbalance异常?

Barbara Streisand
发布: 2024-11-03 21:17:29
原创
838 人浏览过

How to Fix the PinvokeStackImbalance Exception in VS2010?

修复 VS2010 中的 PinvokeStackImbalance 异常

之前在 VS2008 中默认禁用的 PinvokeStackImbalance 异常在 VS2010 中已默认启用。此异常旨在提醒开发人员 DllImport 调用中的调用约定不正确。

问题定义

将解决方案从 VS2008 迁移到 VS2010 时,DllImport 调用 C DLL始终抛出 PinvokeStackImbalance 异常,即使 DLL 本身没有更改。

解决方案

问题源于 DllImport 声明中使用的不正确的调用约定。默认情况下,DllImport 使用 CallingConvention.WinApi,这相当于 x86 桌面代码的 CallingConvention.StdCall。但是,底层 C 函数声明为 __cdecl,需要 CallingConvention.Cdecl。

修复

修改 DllImport 声明以显式指定正确的调用约定:

<code class="csharp">[DllImport("ImageOperations.dll", CallingConvention = CallingConvention.Cdecl)]
static extern void FasterFunction(
    [MarshalAs(UnmanagedType.LPArray)]ushort[] inImage, //IntPtr inImage, 
    [MarshalAs(UnmanagedType.LPArray)]byte[] outImage, //IntPtr outImage, 
    int inTotalSize, int inWindow, int inLevel);</code>
登录后复制

附加说明

  • 此异常仅发生在托管调试助手(MDA)模式下。它不会在发布模式下触发。
  • 有关调用约定的更多信息,请参阅 MSDN 参考。

以上是如何修复VS2010中的PinvokeStackImbalance异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

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