将.NET结构与WINAPI函数一起使用

时间:2013-11-17 00:04:46

标签: c# .net winapi pinvoke

假设我想调用GetWindowRect函数。我虽然必须创建代表RECT的新结构,但这也有效:

[DllImport("user32.dll")]
public static extern bool GetWindowRect(System.IntPtr hWnd, out Rectangle lpRect);

矩形为System.Drawing.Rectangle。尽管Rectangle的结构与RECT的结构不同,为什么会这样?

将来,我是否应该尽可能使用.NET结构(如Rectange和Point),或为每个WinAPI结构声明新结构?

1 个答案:

答案 0 :(得分:4)

代码运行,结构碰巧具有相同的大小。这与“它有效”并不完全相同。 Windows RECT结构与.NET Rectangle结构相同。 Windows的RECT给出了4条边,.NET使用了Point和Size,差别很大。

只是不要害怕宣布你真正需要的类型。它是一个非常容易适合SO代码窗口的单线程,这是一个很好的衡量标准:

 struct RECT { public int Left, Top, Right, Bottom; }

一行代码永远不会让你找到黑客:)以防万一:不,不需要[StructLayout]。 .NET已经为结构类型自动生成一个。已经适合作为发布的小提琴。