我在课堂模块中有许多重复的结构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
答案 0 :(得分:0)
在我在代码中找到的用法示例中,RtlMoveMemory
Destination
参数是对UDT的直接引用,Source
参数是指向另一个UDT的指针。