C# で COM オブジェクトを作成するのは初めてです。助けが必要な問題が発生しています。
C++ で書かれた ITest という COM インターフェイスがあります。このインターフェイスが存在する DLL の相互運用機能を tlbimp.exe を使用して作成し、テスト システムに登録しました。この ITest インターフェイスを使用する C# テスト アプリケーションを作成しましたが、正常に動作しています。
また、C# で別の COM インターフェイスを作成しています。このインターフェイスには、ITest 型の引数を取るメソッドがあります。このマネージ COM オブジェクトを使用してこのメソッドを呼び出す必要がある C++ プログラムがあります。C++ プログラムを実行すると、次の System.InvalidCastException 例外が発生します。
InvalidCastException: 0:000> !pe 例外オブジェクト: 03281b3c 例外の種類: System.InvalidCastException メッセージ: タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ '.ITest' にキャストできません。IID '<Some GUID>' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: No such interface supported (HRESULT からの例外: 0x80004002 (E_NOINTERFACE))。 内部例外: <なし> StackTrace (生成): <なし> StackTraceString: <なし> HResult: 80004002
C# COM インターフェイスのメソッド定義:
public void MyMethod(ITest pTest);
この COM インターフェイスを使用する C++ コード:
ITest * pTest = NULL; … pTest に有効なポインターが割り当てられる … hr = MyMethod(pTest);
誰かが私を正しい方向に向けて、この問題のデバッグを手伝ってくれませんか?