2010-04-27 20 views
5

Tengo un conjunto de clases de VBA en una base de datos de MS Access. Tengo una cadena xml con datos con los que quiero crear nuevas clases.Deserialización de XML en VB/VBA

Además de configurar cada propiedad individualmente, ¿hay una manera fácil de deserializar el XML en mi objeto?

que he visto el código usando la biblioteca biblioteca de tipos

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 

pero esto no parece trabajar con los módulos de clase estándar. Obtengo un error 429:

ActiveX Component Cannot Be Created 

¿Alguien más puede ayudarme? Prefiero no tener que configurar cada propiedad a mano si puedo evitarlo, ¡algunas de estas clases son enormes!

Respuesta

2

Nunca ejemplo tTLI en ese código & y más tarde se refieren a ella como apenas TLI por lo que no funcionará, el error 429 puede ser porque la biblioteca TypeInfo no se ha registrado, ¿ha agregado como una referencia?

Si lo hizo el siguiente trabajo:

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 

Usted puede reemplazar con InvokeHookCallByName si lo desea.

+0

Las clases privadas en una base de datos de Access no están incluidas en ninguna biblioteca pública de tipos, así que no creo que esto vaya a funcionar, incluso con los errores tipográficos arreglados como sugirió. No creo que 'InterfaceInfoFromObject (Me)' pueda tener éxito porque las interfaces relevantes para 'Me' no son públicas. – MarkJ

+0

InterfaceInfoFromObject funciona a través de IDispatch :: GetTypeInfo() que funciona en Access para mí ... en cuanto a cómo ... ¿quién sabe? –

+0

Gracias Alex. Todavía no está funcionando, está fallando en el Establecer TLI = Nueva aplicación TLIA línea ahora con el mismo error. Hice referencia a la referencia typelib, (tlbinf32.dll) ¿es esta la correcta? Ben. – oharab

Cuestiones relacionadas