2015-11-24 31 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函數。 –