У меня есть ряд классов VBA в базе данных Access MS. У меня есть строка 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
Кто-либо еще может выручить меня? Я не должен устанавливать каждый propery вручную, если я могу помочь ему, некоторые из этих классов огромны!
Вы никогда не используете 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
, если хотите.