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上必须有很多例子。