Pregunta

acabo de hacer una actualización de un archivo DLL que se llama desde VBA en PowerPoint. Todo el desarrollo fue muy bien, pero cuando traté de implementar en otra máquina usuarios consigo un problema que no tengo idea de cómo depurar.

Lo que pasa es que cuando se crea el objeto .Net en el VBA, la referencia que se devuelve es el objeto equivocado, así que la siguiente línea de falla con el método no encontrado.

Dim myObj As Foo.Bar

Public Sub RefreshData()

//'instantiate object
Set myObj = New Foo.Bar   
//'call a method
myObj.HelloWorld

La última línea de falla con Error de tiempo de ejecución '438' objeto no admite esta propiedad o método que es causada por el hecho de que de alguna manera myObj es de tipo "Wrong.Type" en lugar de "Foo.Bar".

"Wrong.Type" está también en el montaje, así que supongo que algo va mal en la biblioteca de tipos, pero he tratado de regeneración (usando regasm / código base / TLB MyLib.dll), y esto no ha ayudado.

No sé cómo diagnosticar esta más lejos. Esperemos que alguien por ahí le puede enumerar algunos pasos sobre cómo diagnosticar este tipo de problema?

¿Fue útil?

Solución 2

En este caso, la eliminación de la referencia al archivo de TLB, y luego añadir de nuevo resuelto el problema

Por desgracia, nunca llegué a encontrar una solución general, o una explicación para el comportamiento.

Otros consejos

Puede ser que el problema de GUID generados automáticamente (de clase, la interfaz, el tipo de biblioteca) - cuando se cambió la DLL, GUID cambiado. Desde el viejo TLB utiliza GUID de edad, refiriéndose a ella, que esos viejos asociado GUID con nombres de tipos, por lo que el código no pudo trabajar con los nuevos GUID. La mayoría del código VB (6 y .NET) me encontré tiene este problema, por lo que si el archivo DLL está escrito en VB, es probable que él (y su trabajo alrededor apoya esta teoría).

Si ese es el problema, una solución general es fijar los GUID de forma explícita, que es un poco molesto si usted tiene una gran cantidad de tipos, ya que se supone que cambiar los GUID como su versión (s) modificar, y usted' ll tiene que hacerlo manualmente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top