COM オブジェクトから progid を動的に抽出する関数を作成する必要があります。
これは可能ですか?
それを行う最良の方法は何ですか?
編集: IProvideClassInfo を実装する処理が必要なすべてのコクラス
COM オブジェクトから progid を動的に抽出する関数を作成する必要があります。
これは可能ですか?
それを行う最良の方法は何ですか?
編集: IProvideClassInfo を実装する処理が必要なすべてのコクラス
まず第一に、情報が最初から利用できるという保証はありません。ProgID を使用してオブジェクトをインスタンス化しただけでも、元に戻すことはできません。
IPersist
最も簡単な方法は、とフレンド (など)のいずれかのインターフェイスにクエリを実行しIPersistStream
、 を呼び出しIPersist::GetClassID
て を取得することCLSID
です。ProgIDFromCLSID
次に、レジストリ ルックアップを使用して、または経由して ProgID に変換します。
もう 1 つのオプションは、この別の方法で目的の CLSIDを照会IProvideClassInfo
してアクセスすることです。IProvideClassInfo2
上記の 2 つの方法のいずれもうまくいかなかった場合の 3 番目のオプションは、クエリIDispatch
を実行してタイプ ライブラリを開き、コクラス情報の検索を繰り返すことです。