2010-12-02 41 views
1

J'ai un module excel vba appelant une DLL C# COM. Parfois, j'ai ce comportement étrange que j'espère que quelqu'un pourrait expliquer. J'obtiens une incompatibilité de type lorsque je parcours le débogueur dans VBA, lorsque j'initialise un objet COM comme suit.Comportement COM étrange dans VBA

If (IsEmpty(cm)) Then 
    Set cm = CreateObject("aimd.CMAdaptor") 
    End If 

Maintenant, je peux ajouter un point d'arrêt dans la VBA et ajoutez une montre à la variable cm, et voir le type ne correspond pas à ce que j'instancié. En fait, le type est pour une propriété à l'intérieur de l'objet que j'essaie de créer ... l'objet pointé a été clairement créé par mon objet "aimd.CMAdaptor" que j'ai instancié, je n'ai tout simplement pas l'objet racine spécifiez, seulement l'enfant. Comme il s'agit d'un objet COM, je me demande si mes mises à jour pourraient utiliser des données de regasm incompatibles ou quelque chose de bizarre qui les amène à chercher l'objet au mauvais endroit, ou quelque chose comme ça. Je le reconstruis constamment pour le débogage, et je l'ajoute à un installateur qui appelle regasm comme une action de construction.

Pensées?

Répondre

1

avéré être une erreur stupide ... Je copiais les attributs qui vous permettent de sélectionner le nom d'une classe comme on le voit sur le côté VBA ...

[ProgId (« aimd.CMAdaptor »)]

était située dans deux classes différentes. Apparemment, il n'y a pas de plainte quand vous faites cela. Je ne suis pas sûr pourquoi il a choisi un sur l'autre, mais après avoir mis à jour l'attribut incorrect, tout fonctionne bien.