我是用 C# 编写 COM 对象的新手。我遇到了一个需要帮助的问题。
我有一个用 C++ 编写的 COM 接口,称为 ITest。我使用 tlbimp.exe 为该接口存在的 DLL 创建了一个互操作,并将其注册到我的测试系统上。我编写了一个使用这个 ITest 接口的 C# 测试应用程序,它运行良好。
我还在用 C# 编写另一个 COM 接口。这个接口有一个方法,它接受一个 ITest 类型的参数。我有一个需要使用此托管 COM 对象并调用此方法的 C++ 程序。当我运行我的 C++ 程序时,我看到以下 System.InvalidCastException 异常:
无效转换异常: 0:000> !pe 异常对象:03281b3c 异常类型:System.InvalidCastException 消息:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“.ITest”。此操作失败,因为 IID 为“<Some GUID>”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(来自 HRESULT 的异常:0x80004002 (E_NOINTERFACE))。 内部异常:<无> StackTrace(生成):<无> 堆栈跟踪字符串:<无> H结果:80004002
C# COM 接口的方法定义:
public void MyMethod(ITest pTest);
使用此 COM 接口的 C++ 代码:
ITest * pTest = NULL; … pTest 被分配了一个有效的指针 … hr = MyMethod(pTest);
有人可以指出我正确的方向并帮助我调试这个问题吗?