2015-11-24 26 views
-2

我有个位的C#代码看起来像这样:GetWindowRect()没有返回一个矩形

[DllImport("user32.dll")] 
private static extern bool GetWindowRect(IntPtr hWnd, ref Rect rect); 
Rect rect = Rect.Zero; 
NativeMethods.GetWindowRect(hWnd, ref rect); 

然而,当我运行该代码时,rect变量仍然等于Rect.Zero(顶/底/左/右都是零),即使GetWindowRect()返回成功。这个函数调用序列在C++中执行时效果很好,但在C/P/Invoke中调用时不会。

我确定我正在打电话给GetWindowRect();那不是问题。问题是GetWindowRect()总是返回RECT{0,0,0,0},无论我如何更改函数调用或我如何定义P/Invoke。

+3

http://www.pinvoke.net/default.aspx/user32/getwindowrect.html –

+0

这可能有所帮助:http://stackoverflow.com/a/6415255/301857 –

+0

您能否显示'Rect'的定义? –

回答

0

事实证明,我进入GetWindowRect()的句柄不是有效的HWND

+1

但你说'GetWindowRect'返回成功。如果'HWND'无效,那么'GetWindowRect'应该返回失败。 –

+0

@RaymondChen我遇到同样的问题,以及使用类似的代码。在C#中使用'out'会导致程序崩溃,而使用'ref'会产生一个空引用错误。 –

+0

使用out产生一个双指针。在C#中定义的'RECT'类需要是一个结构而不是一个类,或者你可以通过val将它传递给interop函数。 –