1

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);

誰かが私を正しい方向に向けて、この問題のデバッグを手伝ってくれませんか?

4

0 に答える 0