私が持っている (SC_COM.dll という名前の) COM オブジェクトの C# ラッパーを生成しようとしていますが、Visual Studio 2008 (Vista を実行) とのリンクで問題が発生しています。COM DLL を使用してこれを登録なしで行う必要があります。マニフェスト ファイルを使用して、Visual Studio に SC_COM.dll について知らせるようにしていますが、これは機能しているようです。TblImp.exe を使用して、Visual Studio 2008 で参照しているタイプ ライブラリ (SC_COMtlb.dll) を生成し、必要な DLL との早期バインディングを実行できるようにしました。DLL は、マニフェストおよび実行可能ファイルと同じディレクトリにあります。
問題は次のとおりです。オブジェクトをインスタンス化し、C# でそのメソッドの 1 つを呼び出そうとすると、次のエラーがスローされます。
エラーが検出されました: タイプ 'SC_COMtlb.SCAccessObjClass' の COM オブジェクトをインターフェイス タイプ 'SC_COMtlb.ISCUploader' にキャストできません。IID '{C677308A-AC0F-427D-889A-47E5DC990138}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーにより失敗したため、この操作は失敗しました: No such interface supported (HRESULT からの例外: 0x80004002 (E_NOINTERFACE)) .
このエラーが何を意味するのか完全にはわかりません。エラー コードを検索したところ、比較的一般的な C# エラーのようです。ここで COM オブジェクトを間違った方法でリンクしようとしているのですか、それとも見逃している可能性のある重要なステップが他にありますか?
システムに登録されていないため、作成したタイプ ライブラリ (S\C_COMtlb.dll) が実際の COM DLL の場所をどのように認識しているか完全にはわからないことに注意してください。ディレクトリ。これが問題になる可能性がありますか?もしそうなら、どうすれば2つをより適切にリンクできますか?