C# .NET アプリケーションで外部のネイティブ COM コンポーネントを使用しています。
この COM DLL にはタイプ ライブラリがないため、相互運用コードを自分で作成する必要があり、TlbImp のように include/idl ファイルを作成しました。しかし、最悪のことは、オブジェクトの作成が次のように失敗することです。
Creating an instance of the COM component with CLSID {40700425-0080-11D2-851F-00C04FC21759} from the IClassFactory failed due to the following error: 80040111
ネイティブを使用し、実装されたインターフェイス IID の 1 つをCoCreateInstance
指定すると、最終的にクラスが作成されます。class_id
結局のところ、問題は COM オブジェクトがパラメーターとして渡されたIClassFactory::CreateInstance
ものをサポートしていないため、返されることにあります(逆アセンブラーとデバッガーで特定しました)。コンポーネントは MS SQL VDI です。IID_IUnknown
riid
CLASS_E_CLASSNOTAVAILABLE
CreateInstance
.NET RCW に別のインターフェイス ID をメソッドに渡すよう強制する方法はありIID_IUnknown
ますか? 私はネットをたくさん検索しましたが、これに対する解決策は見つかりませんでした。
回避策として、現在は C++/CLI を使用してオブジェクトを作成し、IID_IUnknown
この目的ではなく適切なインターフェイスを要求しています。しかし、C++/CLI ではプラットフォームごとに異なる DLL をビルドする必要があるため、C# でコードを作成したいと考えています。
ありがとう