【问题标题】:Copy data from an lParam value to a RECT structure in VB6将数据从 lParam 值复制到 VB6 中的 RECT 结构
【发布时间】:2013-02-06 10:02:06
【问题描述】:

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

有人看到我的错误吗?

谢谢!

【问题讨论】:

    标签: pointers vb6 subclassing copymemory


    【解决方案1】:

    我现在正在使用傻瓜式安全

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

    效果很好。

    【讨论】:

      【解决方案2】:

      您的声明和代码正在传递一个指向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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多