我是在C#中编写COM对象的新手。我遇到了一个需要帮助的问题。
我有一个用C ++编写的名为ITest的COM接口。我使用tlbimp.exe为我的测试系统注册了这个接口的DLL创建了一个互操作。我写了一个使用这个ITest界面的C#测试应用程序,它工作正常。
我也在C#中编写另一个COM接口。该接口有一个采用ITest类型参数的方法。我有一个C ++程序需要使用此托管COM对象并调用此方法。当我运行我的C ++程序时,我看到以下System.InvalidCastException异常:
InvalidCastException: 0:000> !pe Exception object: 03281b3c Exception type: System.InvalidCastException Message: Unable to cast COM object of type 'System.__ComObject' to interface type '.ITest'. This operation failed because the QueryInterface call on the COM component for the interface with IID '<Some GUID>' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)). InnerException: <none> StackTrace (generated): <none> StackTraceString: <none> HResult: 80004002
C#COM接口的方法定义:
public void MyMethod(ITest pTest);
使用此COM接口的C ++代码:
ITest * pTest = NULL; … pTest gets assigned a valid pointer … hr = MyMethod(pTest);
有人可以指出我正确的方向并帮我调试这个问题吗?