COM 相互運用では、1 つの COM ライブラリに対して 1 つの相互運用ライブラリが作成されるとは限りません。これは、タイプ ライブラリ インポーターの既定の動作にすぎません。複数の COM ライブラリに対して 1 つの相互運用アセンブリを提供することも、1 つの COM ライブラリに対して複数の相互運用アセンブリを提供することもできます。
相互運用アセンブリは、COM ライブラリにリンクされていません! ソース ライブラリをターゲット システムにインストールしなくても、簡単に展開できます。実際、ライブラリ オブジェクトの 1 つのインスタンスを作成しようとすると、すぐに失敗します。相互運用アセンブリ内のオブジェクトは、そのソースを見つけたい場合に重要です。これらは、Runtime Callable Wrapperと呼ばれます (Runtime は CLR の略です)。これが、相互運用アセンブリが呼び出される理由RCW.Xyz.dll
です。おそらく、アセンブリの開発者は、tlbimp の/out
スイッチを使用してアセンブリを作成しました。
ライブラリを検索する場合、特定の COM タイプが定義されている場合は、interop アセンブリ内でクラス名を検索するだけです。これを行うには、Visual Studio のオブジェクト エクスプローラーを使用できます。相互運用アセンブリを逆アセンブルする必要はありません。これらのアセンブリは通常、コードをまったく定義しません。CLR を満たすメタデータのみを提供します。各クラスは、ComImport
属性と属性でマークされGuid
ます。この GUID を使用して、レジストリ内のクラスを識別します (HKEY_CLASSES_ROOT\CLSID\{GUID}
回答で述べたように)。キーのInproc32
デフォルト値は、型が定義されているライブラリです。これは、インプロセス COM サーバー (DLL; COM は他のライブラリ型をサポートします) にのみ適用されることに注意してください。
前述のように、これは実際にはクラスごとに行う必要があります。ただし、相互運用アセンブリの開発者がタイプ ライブラリ インポーターを使用して相互運用アセンブリを生成し、それを変更したり他のアセンブリとマージしたりしなかった場合は、前述の tlbimp の既定の動作により、1 つの型に対してのみ行うだけで十分です。