将数据从 lParam 值复制到 VB6 中的 RECT 结构



我试图在子类化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)

或者,您可以根据其他答案创建强类型别名。

最新更新