プロジェクトを 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 関数で指定されているかを調べるにはどうすればよいですか?
EDIT私のプロジェクトは、 C#Rubber Rectangle
のコードを使用してXOR描画を行っています。.Net 4 で動作するようにコードを修正する必要があるようです。