1

我正在尝试从lParam子类化中获取 rect 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),我认为我做错了什么。

有人看到我的错误吗?

谢谢!

4

2 回答 2

2

我现在正在使用傻瓜安全

Private Declare Function CopyFromLParamToRect Lib "user32" Alias "CopyRect" (lpDestRect As RECT, ByVal lpSourceRect As Long) As Long

它工作正常。

于 2013-02-21T06:55:47.827 回答
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)

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

于 2013-02-21T13:39:22.630 回答