8

COM オブジェクトをインスタンス化せずに、タイプ ライブラリに含まれる COM クラスの ProgID または CLSID を指定して、タイプ ライブラリのパスまたは LIBID をプログラムで取得するにはどうすればよいですか?

一部の COM オブジェクトでは、レジストリ パスを介してこれを行うことができます。

HKEY_CLASSES_ROOT\CLSID\{clsid}\TypeLib

TypeLibただし、次のような一部の COM オブジェクトにはキーがありませんWord.Application

ここに画像の説明を入力

COM オブジェクトをインスタンス化せずに、これらの COM オブジェクトのタイプ ライブラリ パスまたは LIBID を特定するにはどうすればよいですか?

4

2 に答える 2

2

タイプ ライブラリは、特定の に関連付けられている場合と関連付けられていない場合がありますCLSID。レジストリにタイプ ライブラリ リファレンスがない場合は、実行時にIDispatch::GetTypeInfo.

タイプ ライブラリ (登録済みのタイプ ライブラリ) を持たない COM クラスは依然として有効な COM クラスであるため、タイプ ライブラリがまったくなくても正常に実行され、使用可能になる可能性があります。

.EXEもう 1 つの可能性は、COM サーバーをホストしているバイナリ ( 、.DLL、または)を見つけて、.OCXそのリソース (通常は識別子 1 の下) からタイプ ライブラリをロードしようとすることです。多くの場合、タイプ ライブラリはすぐそこにあります。

于 2012-10-19T13:40:49.920 に答える
0

質問で述べたように、すべての COM オブジェクトがTypeLibレジストリに ID を持っているわけではなく、TypeLib をターゲット システムに出荷する必要はありませんが、オブジェクトの情報を公開するには、TypeLib が必要です。そのため、TypeLib 情報がEXEまたはDLLにリソースとして格納されるのが一般的です。LoadTypeLib関数を使用して、指定されたモジュールからTypeLib 情報をITypeLibとして抽出し、独自に記述したりIDL、リソースを抽出して として保存したりでき.tlbます。

于 2012-10-19T13:52:30.580 に答える