我将我的项目从 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中的代码进行 XOR 绘图。显然,代码需要修复才能在 .Net 4 中工作。