我正在尝试从lParam
获取矩形,同时继承WM_MOVING
。
我的代码目前是
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),我认为我做错了。
有人看到我的错误吗?
谢谢!
答案 0 :(得分:2)
我现在正在使用傻瓜安全
Private Declare Function CopyFromLParamToRect Lib "user32" Alias "CopyRect" (lpDestRect As RECT, ByVal lpSourceRect As Long) As Long
工作正常。
答案 1 :(得分:1)
您的声明和代码正在传递指向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)
关键字将指针传递给任何内容,或指针值本身。
{{1}}
另外,您可以根据其他答案创建强类型别名。