【问题标题】:IClassFactory failed due to the following error: 800a0153由于以下错误,IClassFactory 失败:800a0153
【发布时间】:2011-06-29 08:37:35
【问题描述】:

我正在尝试引用一个 com 组件,但它抛出了以下错误。

由于以下错误,从 IClassFactory 创建 CLSID 为 {xxx} 的 COM 组件实例失败:800a0153。

特别是当我尝试实例化一个对象时会抛出错误。我查过了

  1. 正在为 x86 处理器构建的项目
  2. com 对象是使用 regsvr32 注册的,并且在注册表中可用。

我还可以在对象浏览器中看到方法,所以我知道 .net 正在查找它。

关于我缺少什么的任何想法?

【问题讨论】:

  • FYI 0x800a0153 = VB_E_TERRREGBADFILE 根据 err.exe,虽然我找不到更多信息。

标签: com com-interop


【解决方案1】:

当我不得不做大量的 COM 工作时,我经常使用这些家伙的 COM Explorer:

http://download.cnet.com/COM-Explorer/3000-2206_4-10022464.html?tag=mncol;lst

去年我不得不安装它来调试 Office 插件的一个奇怪的 COM 注册问题。

另外,我与这些人没有任何关系(看起来公司无论如何都可能是干杯)。

【讨论】:

  • 您在工具中看到了什么?我看到 dll 注册等。
  • 如果我没记错的话,有一个“查找问题”或类似的菜单选项。我已经有一段时间没有使用这个工具了,所以我对细节有点模糊。
【解决方案2】:

这是特定于组件的错误代码。如果您没有解释代码可能含义的文档,那么您将需要供应商的支持。

【讨论】:

  • 你确定吗?设施代码是 FACILITY_CONTROL,但错误代码似乎在标准范围内,而不是 OLE 定义的自定义范围内。这不是表明它是 Microsoft 定义的(但遗憾的是未记录)错误吗?
  • @Chris - 是的,我确定。它还涵盖自动化错误,SCODE 是应用程序的内部错误代码。您通常可以获得 IErrorInfo 来获得描述,但 OP 在获得接口指针之前就获得了它。但是 GetErrorInfo() 可能仍然有效。
  • 我已经联系了供应商,让我们看看会发生什么...当我知道更多时会更新。
  • 供应商向我发送了一组有效的新文件,因此将其标记为答案。
【解决方案3】:

正如我对 Hans 回答的评论中所指出的,此错误代码是 FACILITY_CONTROL,它应该与 OLE/ActiveX 控件相关,并且具有位于 OleCtl 中定义的标准范围(即供 Microsoft 使用)的错误代码.h,但未记录在 Win32 头文件中,因此可能是 Microsoft 产品(如 Visual Basic)的内部文件。

您能告诉我们有关您尝试使用的 COM 组件的任何其他信息吗?

如果 COM 组件是使用 Visual Basic 编写的,我认为您所看到的可能等同于运行时错误 339,Visual Basic 的用户在尝试引用缺少某些依赖项的 OCX 控件时会看到该错误.您可以使用Depends.exe 查看 COM 服务器的 DLL/EXE 的依赖关系,看看它们是否都存在于您的计算机上。

【讨论】:

  • 我相信它是用 VB6 编写的,但尚未与供应商接触,以得到答案和相关问题的答案。我使用 COM 资源管理器检查是否缺少任何依赖项,它说没有任何依赖项错误...将尝试使用depends.exe 并回复您
  • 我使用depends.exe进行了检查,它显示 - 2 个缺少依赖项 gpsvc.dll、ieshims.dll - 2 个依赖项位于红色 comctl32.dll 和 ieframe.dll 中。但是,我确实在我的机器上看到了所有这些。
  • 我想你已经找到了你的问题。一定有一些版本不一致导致 COM 服务器在您尝试加载它时失败。欢迎回到 1990 年代的 DLL 地狱,“我们也没有走出困境”[Marlowe 1604]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2019-10-15
  • 1970-01-01
  • 2018-05-20
  • 2021-10-07
相关资源
最近更新 更多