【发布时间】:2012-10-09 06:13:43
【问题描述】:
我将我的项目从 VS2005(针对 .net 2)更新到 VS2010(针对 .net4)。似乎pInvokeStackImbalance MDA 默认启用,然后我得到一堆"unbalanced the stack" 异常。以这个为例:
[DllImportAttribute("gdi32.dll")]
private static extern IntPtr CreateSolidBrush(BrushStyles enBrushStyle, int crColor);
它在 .net 2 中工作,但现在它抛出异常。我把它改成了这个,它可以工作:
[DllImportAttribute("gdi32.dll", CallingConvention = CallingConvention.ThisCall)]
private static extern IntPtr CreateSolidBrush(BrushStyles enBrushStyle, int crColor);
令我惊讶的是,pinvoke.net 将其列为
[DllImport("gdi32.dll")]
static extern IntPtr CreateSolidBrush(uint crColor);
为什么我的老不工作?似乎 pinvoke.net 是错误的,但我如何找出哪个调用转换是给定一个 win32 函数?
编辑
我的项目使用来自C# Rubber Rectangle 的代码进行异或绘图。显然,代码需要修复才能在 .Net 4 中运行。
【问题讨论】: