COM へのアセンブリの登録
アセンブリ登録ツール (Regasm.exe) と呼ばれるコマンド ライン ツールを実行して、COM で使用するアセンブリを登録または登録解除できます。 Regasm.exe は、COM クライアントが特別な処理を行わなくても .NET クラスを使用できるように、クラスに関する情報をシステム レジストリに追加します。 RegistrationServices クラスは、これと同等の機能を提供します。
マネージ コンポーネントを COM クライアントからアクティブにするには、Windows レジストリに登録する必要があります。 Regasm.exe によって通常 Windows レジストリに追加されるキーを次の表に示します (000000 は実際の GUID 値を示します)。
GUID |
説明 |
レジストリ キー |
---|---|---|
CLSID |
クラス ID |
HKEY_CLASSES_ROOT\CLSID\{000...000} |
IID |
インターフェイス ID |
HKEY_CLASSES_ROOT\Interface\{000...000} |
LIBID |
ライブラリ ID |
HKEY_CLASSES_ROOT\TypeLib\{000...000} |
[ProgID] |
プログラム ID |
HKEY_CLASSES_ROOT\000...000 |
HKCR\CLSID\{0000...0000} キーの下には、既定値としてそのクラスの ProgID が設定され、Class と Assembly という 2 つの名前付きの値が新しく追加されます。 ランタイムは、レジストリから Assembly の値を読み取り、その値をランタイムのアセンブリ リゾルバーに渡します。 アセンブリ リゾルバーは、名前やバージョン番号などのアセンブリ情報に基づいて、そのアセンブリを検索します。 アセンブリ リゾルバーでアセンブリを検出するには、アセンブリが次のいずれかの場所に存在している必要があります。
グローバル アセンブリ キャッシュ (厳密な名前を持つアセンブリである必要があります)。
アプリケーション ディレクトリ。 アプリケーション パスから読み込まれたアセンブリは、そのアプリケーションからしかアクセスできません。
Regasm.exe に対して /codebase オプションで指定したファイル パス。
Regasm.exe は HKCR\CLSID\{0000....0000} キーの下に、InProcServer32 キーも作成します。 このキーの既定値は、共通言語ランタイム (Mscoree.dll) を初期化する DLL の名前に設定されます。
レジストリ エントリのチェック
COM 相互運用機能では、.NET Framework クラスのインスタンスを生成するために、標準のクラス ファクトリの実装が用意されています。 クライアントでは、他の COM コンポーネントの場合と同様に、マネージ DLL 上の DllGetClassObject を呼び出してクラス ファクトリを取得し、オブジェクトを生成できます。
従来の COM タイプ ライブラリの代わりに Mscoree.dll への参照が表示され、共通言語ランタイムによってマネージ オブジェクトが作成されることを示します。