私はCreateRectRgngdi32.dllでP/Invokingしています。この関数の通常のP/Invokeシグニチャは次のとおりです。
[DllImport("gdi32", SetLastError=true)]
static extern IntPtr CreateRectRgn(int nLeft, int nTop, int nRight, int nBottom);
ショートカットとして、このオーバーロードも定義しました。
[DllImport("gdi32", SetLastError=true)]
static extern IntPtr CreateRectRgn(RECT rc);
[StructLayout(LayoutKind.Sequential)]
struct RECT{
public int left;
public int top;
public int right;
public int bottom;
}
(はい、私は知っていますが、この構造とのCreateRectRgnIndirect間で変換するには関数を使用する必要があるため、中間変数を含まないため、上記の方が便利です。)System.Drawing.RectangleRECT
このオーバーロードは、へのエントリ時にスタックを同じ状態にする必要があるため、通常の署名と同じように機能するはずですCreateRectRgn。実際、32ビットのWindows XPでは、問題なく動作します。しかし、Windows 7、64ビットでは、関数はゼロをMarshal.GetLastWin32Error()返し、87を返します。これは「パラメーターが正しくありません」です。
何が問題になる可能性があるかについてのアイデアはありますか?