2010-12-22 8 views
1

J'utilisais une application et cela fonctionnait parfaitement. Après quelques mois de ne pas l'utiliser, j'ai essayé de le faire fonctionner et ça ne marche pas. Il affiche une boîte de message indiquant qu'il ne peut pas instance un objet COM.Suivi d'une erreur d'objet COM dans l'application

Est-ce que quelqu'un sait comment suivre les erreurs dans les objets COM?

Répondre

1

Vous pouvez utiliser ProcessMonitor et essayer de trouver la clé de registre qui peut être incorrecte. L'autre option consiste à utiliser http://www.moduleanalyzer.com, il intercepte CoCreateInstance affichant tous les objets COM créés et les valeurs de retour.

+0

J'ai essayé ProcessMonitor mais vraiment je ne comprenais pas comment ça peut m'aider. J'ai regardé les clés de registre et tout semble aller bien. Le problème a été détecté par l'analyseur de module qui a montré mon une erreur de COM que j'ai pu fixer l'inscription encore une DLL. Il semble qu'une nouvelle version d'un objet ait été installée et que l'ancienne application demandait l'ancienne interface qui n'est plus valide pour l'objet. Après avoir enregistré l'objet correct, l'application fonctionne correctement! –

1

Exécutez l'outil Depends sur l'objet COM DLL pour vérifier qu'il possède toutes les DLL nécessaires, réinscrivez le COM dll/exe.

Tout HRESULTS du débogage/logs? Des changements dans les modèles d'appartements?

Vous ne pouvez pas modifier le type d'appartement une fois que vous en avez défini un. Donc, si l'objet ne peut pas utiliser l'un des modèles et que vous essayez de le co-créer, il échouera. C'est pourquoi vous n'appelez jamais CoInit depuis le thread principal DLL.

+0

DebugView n'affiche aucune erreur. Oui, je comprends que CoCreate échouera dans ces circonstances, mais je veux savoir quel objet a échoué à CoCreateInstance. –