2010-03-10 24 views
5

Une exception System.Runtime.InteropServices.COMException de 0x80040154 signifie-t-elle toujours que la classe n'est pas enregistrée? Je reçois une exception COMException qui indique "Récupération de la fabrique de classe COM pour le composant avec CLSID {29131539-2EED-1069-BF5D-00DD011186B7} a échoué en raison de l'erreur suivante: 80040154." Il essaie de charger Interop.Domino.dll qui est une référence que j'ai obtenue à partir de l'onglet COM de la référence d'ajout appelée "Lotus Domino Objects" qui pointe vers domobj.tlb dans le dossier du programme Notes.Une exception COMException de 0x80040154 est-elle toujours "Classe non enregistrée"?

J'ai écrit le code il y a des années - c'est la seule chose que j'ai jamais faite avec interop et il est juste de dire que je n'ai jamais vraiment compris.

Je vois à nouveau cette erreur après avoir déplacé le code sur un serveur 2008 R2 (il s'agit donc de x64). Il a été écrit sur XP et exécuté en 2003 (les deux x86). Afin de diagnostiquer le problème, j'ai construit une boîte Win7 x86 (car il n'y a pas de R2 x86) et cela a fonctionné. J'ai également construit une boîte 2003 x64 et il échoue avec la même erreur, il semble donc que cela est causé par le passage à l'architecture x64. Y a-t-il quelque chose que je devrais faire en faisant interop pour obtenir des DLL COM x86 pour fonctionner sur des machines x64?

Répondre

2

Faites attention au registre des composants 32 bits en utilisant le registre approprié (C: \ Windows \ SysWOW64 \ regsvr32.exe).
Si vous vous êtes déjà enregistré avec la version 64 bits, désinscrivez chaque DLL avec la même version.

Plus vous aider à trouver ici Team is Going from XP32 to XP64 for .NET Development - Any Gotchas?

Bonne chance

+0

Oui, c'est en place, merci. Et merci pour le lien. – ssg31415926

4

J'ai eu le même problème en essayant de construire et exécuter une application .NET sous Windows 7 x64 qui a appelé interop.domino.dll, qui est 32 bit seulement.

Pour résoudre, j'ai recompilé l'application .NET pour s'exécuter spécifiquement en tant que x86 lors de l'exécution sur les systèmes d'exploitation x64. J'utilisais Visual Studio 2010 Express Edition, qui est plus difficile à cibler spécifiquement pour les plates-formes x86 que les versions payantes.

La solution était:

  1. Cliquez sur Outils> Options> PROJETS ET SOLUTIONS
  2. Cochez la case "AvancéeVoiler construire des configurations" et cliquez sur OK
  3. Cliquez sur Outils> Réglages> REGLAGES D'EXPERTS pour voir le gestionnaire de configuration de construction
  4. Cliquez bUILD> gestionnaire de configuration sélectionnez le menu déroulant de plate-forme pour X86 et cliquez sur Fermer
  5. reconstruire maintenant, le projet
2

Une note technique IBM indique que les classes COM Domino ne sont pas prises en charge sur un système d'exploitation 64 bits. Voir https://www-304.ibm.com/support/docview.wss?uid=swg21454291 Donc, il semble même en compilant le code pour s'exécuter en tant que x86 (selon la réponse de mpownie), vous prenez encore quelques chances.