我CreateRectRgn
在 gdi32.dll 中 P/Invoking to。此函数的正常 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.Rectangle
RECT
这个重载应该与正常签名一样工作,因为它应该在入口处将堆栈置于相同的状态CreateRectRgn
。事实上,在 32 位的 Windows XP 上,它可以完美运行。但在 Windows 7 64 位上,该函数返回 0,并Marshal.GetLastWin32Error()
返回 87,即“参数不正确”。
关于可能是什么问题的任何想法?