0x80040154的COMException是否总是表示“类未注册”?

5
System.Runtime.InteropServices.COMException的0x80040154错误是否总是意味着类未注册?我遇到了一个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个回答

4

我曾经遇到过同样的问题,尝试在 Windows 7 x64 上构建和运行调用 interop.domino.dll 的 .NET 应用程序,但该 DLL 只支持 32 位。

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

我使用的是 Visual Studio 2010 Express Edition,针对 x86 平台进行特定的目标设置比付费版本更棘手。

解决方案如下:

  1. 点击“工具”>“选项”>“项目和解决方案”
  2. 选中“显示高级生成配置”复选框,然后单击“确定”
  3. 点击“工具”>“设置”>勾选“专家设置”以查看生成配置管理器
  4. 单击“生成”>“配置管理器”,选择平台下拉列表为 X86,然后单击“关闭”
  5. 现在重新构建项目

2

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接