找到并设置UDT成员VB6的值
我正在寻找一些帮助来解决UDT成员的动态集值问题。我正在尝试做一些类似前面的伪代码的事情:找到并设置UDT成员VB6的值,vb6,user-defined-types,user-defined-fields,tlbinf32,Vb6,User Defined Types,User Defined Fields,Tlbinf32,我正在寻找一些帮助来解决UDT成员的动态集值问题。我正在尝试做一些类似前面的伪代码的事情: Public sub UDTMemberSetValue(ByRef pvUDTValue As Variant, _ ByVal psMemberName As String, _ pvMemberValue As Variant) Dim mMember as Member
Public sub UDTMemberSetValue(ByRef pvUDTValue As Variant, _
ByVal psMemberName As String, _
pvMemberValue As Variant)
Dim mMember as Member
For each mMember in pvUDTValue.Members
if mMember.Name = psMemberName then
if isObject(pvMemberValue) then
Set mMember.Value = pvMemberValue
else
mMember.Value = pvMemberValue
End if
End If
Next
End Sub
我已经搜索了好几个网站,不幸的是没有一个是我需要的。
所以我想知道是否有人能帮我做这件事?你不能直接在VB6中做这件事。但是,您可以使用
tlbinf32.dll
ActiveX组件,该组件作为Windows的一部分安装,至少从Windows XP开始。这可用于从类型库中提取有关类、接口和记录(即UDT)的信息。缺点是,如果您想将其用于VB UDT,则只有在公开的VB类或UserControl中将UDT声明为Public时,它才会起作用
组件应进行注册;但如果不是,请使用regsvr32.exe tlbinf32.dll
。它应该以TypeLib Information
的形式出现在引用列表中,并具有库名TLI
我已经修改了您的伪代码以包含库。这个的原始版本非常像你的代码,我想知道你是否已经知道了
但是有一种更简单的方法可以遍历成员信息,并设置正确的value属性:使用RecordField
属性。不幸的是,至少在我的机器上,我无法将pvUDTValue直接传递到此属性。但经过反复试验,我发现它与变体的副本一起工作。您只需记住在更新字段后用副本替换原始变量
Public Sub UDTMemberSetValue(ByRef pvUDTValue As Variant, _
ByVal psMemberName As String, _
ByRef pvMemberValue As Variant)
Dim oApp As TLI.TLIApplication
Dim vTemp As Variant
Set oApp = New TLI.TLIApplication
vTemp = CVar(pvUDTValue)
oApp.RecordField(vTemp, psMemberName) = pvMemberValue
pvUDTValue = vTemp
End Sub
+1一些链接:(从2000年开始,但仍然相关),如果您将UDT转换为类,则可以使用CallByName