是不是0x80040154的COMException总是'Class not registered'?

时间:2010-03-10 11:08:03

标签: 64-bit com-interop lotus-notes lotus-domino

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机器上工作时,我应该做些什么吗?

3 个答案:

答案 0 :(得分:4)

我在尝试在Windows 7 x64上构建和运行一个名为interop.domino.dll的.NET应用程序时遇到了同样的问题,该应用程序只有32位。

要解决这个问题,我重新编译了.NET应用程序,以便在x64操作系统上运行时专门运行x86。

我使用的是Visual Studio 2010 Express Edition,专门针对x86平台而不是付费版本。

解决方案是:

  1. 点击工具>选项>项目和解决方案
  2. 选中“显示高级构建配置”框,然后单击“确定”
  3. 点击工具>设置>检查EXPERT SETTINGS以查看构建配置管理器
  4. 点击BUILD> CONFIGURATION MANAGER选择X86的平台下拉列表,然后单击CLOSE
  5. 现在重建项目

答案 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的答案),你仍然有机会。