2013-02-21 77 views
1

我試圖從lParam得到矩形,同時子類別WM_MOVING將數據從lParam值複製到VB6中的RECT結構中

我的代碼目前是

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

我現在用的傻瓜式安全

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

它工作正常。

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) 

另外,您可以根據其他答案創建強類型別名。

相關問題