Question

Je viens de faire une mise à jour d'une dll qui est appelé à partir de VBA au sein de Powerpoint. Tout le développement est bien passé, mais quand j'ai essayé de déployer sur une autre machine utilisateurs je reçois un problème que je ne sais pas comment déboguer.

Qu'est-ce qui se passe est que lorsque l'objet .Net est créé dans la VBA, la référence qui est retourné est le mauvais objet, donc la ligne suivante échoue avec méthode introuvable.

Dim myObj As Foo.Bar

Public Sub RefreshData()

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

La dernière ligne échoue avec Erreur d'exécution « 438 » objet ne prend pas en charge cette propriété ou méthode qui est causée par le fait que myObj est en quelque sorte de type « Wrong.Type » au lieu de "Foo.Bar".

« Wrong.Type » est dans l'assemblée, donc je suppose que quelque chose va mal avec la bibliothèque de type, mais je l'ai essayé régénérant (en utilisant regasm / codebase / TLB MYLIB.DLL), et cela n'a pas aidé.

Je ne sais pas comment diagnostiquer cette plus loin. Espérons que quelqu'un là-bas peut énumérer quelques étapes sur la façon de diagnostiquer ce genre de problème?

Était-ce utile?

La solution 2

Dans ce cas, la suppression de la référence au fichier TLB, puis l'ajouter à nouveau résolu le problème

Malheureusement, je n'ai trouvé une solution générale, ou une explication du comportement.

Autres conseils

Il pourrait le problème de GUIDs automatiquement générés (classe, interface, bibliothèque de type) - lorsque vous avez modifié la DLL, GUIDs changé. Depuis l'ancien TLB utilisé vieux GUIDs, en faisant référence, vous associé ces vieux noms avec GUIDs de type, de sorte que le code n'a pas réussi à travailler avec les nouveaux GUIDs. La plupart VB (6 et .NET) code que je rencontrais a ce problème, donc si votre DLL est écrit en VB, il est probablement (et votre travail soutient autour de cette théorie).

Si tel est le problème, une solution générale est de définir explicitement GUIDs, ce qui est un peu ennuyeux si vous avez beaucoup de types, puisque vous êtes censé changer GUIDs comme votre version (s) changement, et vous ll faut le faire manuellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top