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

时间:2013-02-21 06:47:40

标签: pointers vb6 subclassing copymemory

我正在尝试从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),我认为我做错了。

有人看到我的错误吗?

谢谢!

2 个答案:

答案 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}}

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