将UDT传递给RtlMoveMemory作为引用的引用

时间:2018-03-20 12:52:39

标签: vb6

我在课堂模块中有许多重复的结构Construction_1 我想用Construction_2替换它们,使用共同的子程序RMM 但是,我担心的是:
传递给RtlMoveMemory是正确的 不是直接引用UDT而是引用参考
将它作为“目的地”参数?

添加: y_UDT是固定长度,uUDT传递给RMM As y_UDT,而不是As Variant

' Class module
Option Explicit
'
Private Type y_UDT
    VarLng As Long
    VarByt As Byte
    VarFst As String * 16
End Type

Private Declare Sub RtlMoveMemory Lib "Kernel32" ( _
                    ByRef Destination As Any, _
                    ByRef Source As Any, _
                    ByVal Length&)

' ...

'<--- Construction_1
    ' code before
    '
    lpUDT = SomeCalculations(vSrcData_xx)
    Call RtlMoveMemory(uUDT_xx, ByVal lpUDT, ByVal UDTLENB)  
    '
    ' code after
'--->

' ...

'<--- Construction_2
    Call Sub RMM(uUDT_xx, vSrcData_xx)
'--->

' ...

Sub RMM(ByRef uUDT As y_UDT, ByVal vSrcData As Variant)
Dim lpUDT As Long
'<--- 
    ' code before
    '
    lpUDT = SomeCalculations(vSrcData)
    Call RtlMoveMemory(uUDT, ByVal lpUDT, ByVal UDTLENB)  
    '
    ' code after
'--->
End Sub

1 个答案:

答案 0 :(得分:0)

在我在代码中找到的用法示例中,RtlMoveMemory Destination参数是对UDT的直接引用,Source参数是指向另一个UDT的指针。