VB/VBA中的XML反序列化
我在MS Access数据库中有一组VBA类。 我有一个xml字符串,其中包含我想用来创建新类的数据 除了单独设置每个属性外,还有没有简单的方法将XML反序列化到我的对象中 我已经看到了使用TypeLib库的代码VB/VBA中的XML反序列化,xml,vba,vb6,serialization,xml-deserialization,Xml,Vba,Vb6,Serialization,Xml Deserialization,我在MS Access数据库中有一组VBA类。 我有一个xml字符串,其中包含我想用来创建新类的数据 除了单独设置每个属性外,还有没有简单的方法将XML反序列化到我的对象中 我已经看到了使用TypeLib库的代码 Public Sub ISerializable_Deserialize(xml As IXMLDOMNode) Dim tTLI As TLIApplication Dim tInvoke As InvokeKinds Dim tName As String Dim
Public Sub ISerializable_Deserialize(xml As IXMLDOMNode)
Dim tTLI As TLIApplication
Dim tInvoke As InvokeKinds
Dim tName As String
Dim tMem As MemberInfo
tInvoke = VbLet
For Each tMem In TLI.ClassInfoFromObject(Me).Members
tName = LCase(tMem.Name)
CallByName Me, tMem.Name, VbLet, xml.Attributes.getNamedItem(tName).Text
Next tMem
End Sub
但这似乎不适用于标准类模块。我得到一个429错误:
ActiveX Component Cannot Be Created
还有谁能帮我吗?如果我能帮忙的话,我宁愿不必手动设置每个属性,其中一些类是巨大的 您从未在该代码中引用过
tTLI
,后来将其称为TLI
,因此无法使用,429错误可能是因为TypeInfo库未注册,您是否将其添加为引用
如果您执行了以下操作,则将有效:
Dim TLI As TLIApplication
Dim II As InterfaceInfo
Dim MI As MemberInfo
Set TLI = New TLIApplication
Set II = TLI.InterfaceInfoFromObject(Me)
For Each MI In II.Members
If MI.InvokeKind = InvokeKinds.INVOKE_PROPERTYPUT Then
Debug.Print MI.Name
TLI.InvokeHook Me, MI.Name, InvokeKinds.INVOKE_PROPERTYPUT, "PROPVALUE"
End If
Next
如果愿意,您可以将
InvokeHook
替换为CallByName
。Access数据库中的私有类不包含在任何公共类型库中,因此我认为即使按照您的建议修复了键入错误,这也行不通。我认为interfaceinfo-fromObject(Me)
不可能成功,因为Me
的相关接口不是公共的。interfaceinfo-fromObject通过IDispatch::GetTypeInfo()工作,IDispatch::GetTypeInfo()在Access中为我工作。。至于如何。。谁知道呢?谢谢你,亚历克斯。它仍然不工作,它在Set TLI=New tliaapplication行上失败,并且出现了相同的错误。我引用了typelib引用(tlbinf32.dll),这是正确的吗?本,呸!看起来tlbinf32没有注册。一个简单的regsvr32“c:\WINDOWS\system32\TLBINF32.DLL”,我在做生意。非常感谢你。本