【问题标题】:Retrieving the COM class factory for component with CLSID {} failed检索具有 CLSID {} 的组件的 COM 类工厂失败
【发布时间】:2012-02-07 17:38:22
【问题描述】:

运行 C# Windows 窗体应用程序时出现此错误:

Retrieving the COM class factory for component with CLSID {} failed 
due to the following error: 80040154 Class not registered (Exception 
from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

这出现在 32 位 Windows XP 的 IDE 中。有问题的 COM 组件是一个第 3 方 dll,它肯定在有问题的机器上注册好。我的项目是针对 x86 好的。我似乎只在实例化组件的特定类时收到错误,我使用的其他类工作正常。

我已经尝试使用刚刚作为参考直接添加的组件,并且还创建了一个互操作程序集并引用了它,但得到了相同的结果。使用 regsvr32 取消注册和重新注册组件无济于事。

如果我在 VB6 应用程序中引用相同的组件并实例化相同的类,它就可以正常工作!我很困惑,任何人都可以提供任何可以帮助我的建议吗?!

谢谢。

【问题讨论】:

  • 好吧,你排除了明显的原因。剩下的是 DLL Hell,你使用的类型库可能与实际安装的组件不匹配。您可以通过运行 SysInternals 的 ProcMon 实用程序获得更多洞察力。您将看到您的程序在注册表中搜索 CLSID 键。您可以使用 OleView.exe 程序直接查看类型库。文件 + 查看类型库。您通常需要组件供应商的帮助来解决这个问题。

标签: c# com interop


【解决方案1】:

我通过将实例化行更改为:

Component.MyObject test = new Component.MyObject();

Component.MyObject test;

在这个阶段不确定为什么这会起作用,但它确实如此,所以我可以继续!我仍在实例化与 new 关键字一起使用的其他类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 2012-02-17
    • 2023-04-07
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多