无法生成工厂对象 - 80040154错误

时间:2011-03-25 03:11:36

标签: factory regsvr32

我继承了一个复杂的托管/非托管项目的维护,我希望我能以简洁的方式提出这个问题......

我有一个非托管类(C ++),我试图通过托管代码(C#)访问。这可以通过以下方式实现:

  • 非托管类(Prop)编译为非托管dll(PropUnmanaged.dll)
  • PropUnmanaged.dll已在regsvr32中注册 regsvr32 / s PropDLL
  • 使用tlbimp
    将PropDLL中的类和类型公开给托管代码 这将创建一个托管DLL(PropTypesManaged.dll)
    此dll未在regasm或gacutil中注册
  • 尝试访问Prop的托管类(MClass)是在PropTypesManaged.dll作为其依赖项之一的项目中实现的
  • 实现MClass的项目失败,并显示错误消息
    由于以下错误,检索具有CLSID {1EAD9D36-495C-44B2-8559-A6570E1ECE34}的组件的COM类工厂失败:80040154

GUID 1EAD ...指的是由tlbimp生成的Prop类的公开托管类型的GUID。它在注册表中

网络搜索错误代码模糊地表明regsvr32步骤出了问题,但我的系统报告此步骤成功了

我从哪里开始调试?

1 个答案:

答案 0 :(得分:0)

如果您运行的是64位Windows,请确保将C#项目的平台目标更改为x86:

打开项目属性,选择“构建”选项卡,在“常规”部分下,从“平台目标”下拉列表中选择“x86”。