0

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

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

  • 非托管类(Prop)编译成非托管dll(PropUnmanaged.dll)
  • PropUnmanaged.dll 注册到 regsvr32
    regsvr32 /s PropDLL
  • PropDLL 中的类和类型使用 tlbimp 暴露给托管代码
    这将创建一个托管 DLL (PropTypesManaged.dll)
    此 dll 未向 regasm 或 gacutil 注册
  • 尝试访问 Prop 的托管类 (MClass) 在一个项目中实现,该项目将 PropTypesManaged.dll 作为其依赖项之一
  • 实现 MClass 的项目失败并显示错误消息
    Retrieving the COM class factory for component with CLSID {1EAD9D36-495C-44B2-8559-A6570E1ECE34} 由于以下错误而失败:80040154

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

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

我从哪里开始调试呢?

4

1 回答 1

0

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

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

于 2011-08-04T14:22:00.360 回答