我试图在子类化WM_MOVING
时从lParam
获取矩形。
我的代码目前是
Public Declare Function CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal dwLength As Long) As Long
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Dim r As RECT
CopyMemory r, lParam, Len(r)
但是r
的价值观是如此荒谬(比如左:1633872,右:219218039,底部:1(,以至于我认为我做错了什么。
有人看到我的错误吗?
谢谢!
我现在正在使用傻瓜安全
Private Declare Function CopyFromLParamToRect Lib "user32" Alias "CopyRect" (lpDestRect As RECT, ByVal lpSourceRect As Long) As Long
它工作正常。
您的声明和代码正在传递指向lParam
的指针,该指针本身就是指向结构的指针。
您应该调整调用代码以"按值"传递lParam
值,以便CopyMemory
获取实际的数据指针:
CopyMemory r, ByVal lParam, Len(r)
使用最初具有的CopyMemory
泛型声明意味着可以将指针传递给任何内容,或者将指针值本身与 ByVal
关键字传递。
'Copy data out
CopyMemory r, ByVal lParam, Len(r)
'Modify r
'Copy data back in
CopyMemory ByVal lParam, r, Len(r)
或者,您可以根据其他答案创建强类型别名。