1

我是用 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);

有人可以指出我正确的方向并帮助我调试这个问题吗?

4

0 回答 0