0x80040154的System.Runtime.InteropServices.COMException是否始终表示该类未注册?我收到一个COMException,其中显示“由于以下错误,检索具有CLSID {29131539-2EED-1069-BF5D-00DD011186B7}的组件的COM类工厂失败:80040154。”它正在尝试加载Interop.Domino.dll,这是我从Add Reference的COM选项卡中获得的一个名为“Lotus Domino Objects”的引用,它指向Notes程序文件夹中的domobj.tlb。
我几年前编写过这段代码 - 这是我用互操作做的唯一一件事,公平地说,我从来没有真正掌握它。
将代码移动到2008 R2服务器后,我再次看到此错误(因此它是x64)。它是在XP上编写的,并在2003年运行(均为x86)。为了诊断问题,我构建了一个Win7 x86(因为没有R2 x86)框并且它有效。我还构建了一个2003 x64的盒子,它失败并出现相同的错误,因此看起来它是由于迁移到x64架构造成的。在进行互操作以使x86 COM DLL在x64机器上工作时,我应该做些什么吗?
答案 0 :(得分:4)
我在尝试在Windows 7 x64上构建和运行一个名为interop.domino.dll的.NET应用程序时遇到了同样的问题,该应用程序只有32位。
要解决这个问题,我重新编译了.NET应用程序,以便在x64操作系统上运行时专门运行x86。
我使用的是Visual Studio 2010 Express Edition,专门针对x86平台而不是付费版本。
解决方案是:
答案 1 :(得分:2)
注意使用正确的寄存器(C:\ Windows \ SysWOW64 \ regsvr32.exe)注册32位组件。
如果您已注册64位版本,请使用相同版本取消注册每个dll。
您可以在此处找到更多帮助Team is Going from XP32 to XP64 for .NET Development - Any Gotchas?
答案 2 :(得分:2)
有一个IBM技术说明,表明64位操作系统不支持Domino COM类。请参阅https://www-304.ibm.com/support/docview.wss?uid=swg21454291所以即使编译代码以x86运行(根据mpownie的答案),你仍然有机会。