Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB/VBA中的XML反序列化_Xml_Vba_Vb6_Serialization_Xml Deserialization - Fatal编程技术网

VB/VBA中的XML反序列化

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

我在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 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”,我在做生意。非常感谢你。本