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

Vb6 将UDT作为对引用的引用传递给RtlMoveMemory,vb6,Vb6,我在课堂模块中有许多重复的结构,如结构\u 1。 我想用公共子过程RMM 然而,我担心: 传递到rtlmovemory正确吗 不是直接引用UDT,而是引用ref 是否将其作为“目的地”参数 . 添加:y\u UDT为固定长度,uUDT作为y\u UDT传递给RMM,而不是作为变体 ' Class module Option Explicit ' Private Type y_UDT VarLng As Long VarByt As Byte VarFst As Strin

我在课堂模块中有许多重复的结构,如
结构\u 1

我想用公共子过程
RMM

然而,我担心:
传递到rtlmovemory正确吗 不是直接引用UDT,而是引用ref 是否将其作为“目的地”参数 .
添加:
y\u UDT
为固定长度,
uUDT
作为y\u UDT传递给
RMM
,而不是
作为变体

' 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
类模块 选项显式 ' 私有类型y_UDT 变长 VarByt作为字节 VarFst作为字符串*16 端型 私有声明子RtlMoveMemory Lib“Kernel32”(_ ByRef目的地_ ByRef源,如有_ ByVal长度&) ' ... ' ' ... 子RMM(ByRef uUDT作为y_UDT,ByVal vSrcData作为变量) 暗lpUDT与长lpUDT相同
“在我在代码中找到的用法示例中,
rtlmovemory
Destination
参数是对UDT的直接引用,
Source
参数是指向另一个UDT的指针。

您应该整理标记并明确使用哪种语言:VBA与VB6非常不同。如果是VBA,请说明是否使用Excel、Access或Word运行此代码。@Pᴇʜ我觉得你首先应该注意回答这个问题,而不是标签数量。第二,如果您能在上述语言中指定RMM和/或UDT行为的差异,那将非常感谢。当然,如果我的标签真的错了=)БС-Γа-Γа,иаПа…@braX请阅读上面的评论并返回我的所有原始标签。您可能需要阅读。这不是您在这里应该做的,尤其是当您希望这里的人提供帮助时。举个例子:此代码不会在Office 64位版本中运行。因此,尽可能详细地了解环境(您在其中运行代码)是绝对必要的。如果您真的打算在VB6中使用它,这里没有人愿意浪费时间在VBA中测试它。至少有3个人这样认为(正如你在投票中看到的)。也许你没想过,但这不是侮辱这里任何人的理由。如果你想得到别人的帮助,我只能重复一遍,对他们好一点。这是否意味着我所要求的方法是错误的?或者这仅仅意味着先例未知?我实施了“构建2”。正常飞行。然而,我在人所共知的短传入数据集上看到了它。在最终实现之前,我将尝试比较这两种构造创建的每次UDT。在没有实际设置示例代码进行双重检查的情况下,看起来您的代码可以正常工作。但是关于如何在VB6中使用RtlMoveMemory,在web上必须有很多例子。