我继承了一个复杂的托管/非托管项目的维护,我希望我能以简洁的方式提出这个问题......
我有一个非托管类 (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
我从哪里开始调试呢?