我可以让它工作:
[<DllImport("user32.dll")>]
extern bool GetClientRect(nativeint, RECT*)
let getClientRect hwnd =
let mutable r = RECT()
if GetClientRect(hwnd, &&r) = false then
raise <| System.Exception("GetClientRect failed")
r
但无论出于何种原因,这只会留下r
零,没有抛出异常:
[<DllImport("user32.dll")>]
extern bool GetClientRect(nativeint, [<Out>] RECT rect)
let getClientRect hwnd =
let mutable r = RECT()
if GetClientRect(hwnd, r) = false then
raise <| System.Exception("GetClientRect failed")
r
当然,使用指针的问题是我得到了警告warning FS0051: The use of native pointers may result in unverifiable .NET IL code
,这是可以理解的。
我会错过什么?
编辑:即使它已经被回答,为了记录,结构定义:
[<Struct>]
type RECT =
val left:int
val top:int
val right:int
val bottom:int