次の方法で共有


Registration-Free COM オブジェクトの作成

アクティブ化コンテキストを使用すると、COM オブジェクトを登録しなくても使用できます。 これにより、アプリケーションは、レジストリ情報ではなく、バージョンに基づいて異なる機能を持つ複数のコンポーネントを持つことができます。 複数のコンポーネントは、同じ GUID を持つ同じ COM オブジェクトを公開できますが、バージョンに基づいて異なる機能を持ちます。

アプリケーションが CLSIDFromProgID から GUID を要求すると、COM は最初にアクティブなアクティブ化コンテキストで progid から CLSID へのマッピングを検索します。 アプリケーションが CoCreateInstance を使用してインスタンス インターフェイス ポインターを取得すると、COM はアクティブなアクティブ化コンテキストを検索して、CLSID をホストする DLL を見つけます。 アクティブ化コンテキストに必要な情報が含まれていない場合、COM は通常のメソッドを使用してレジストリ内の情報を検索します。

アクティブ化コンテキストはスレッド単位であるため、COM は作成スレッドのアクティブ化コンテキストをホスト スレッドにマーシャリングし、ホスト スレッドで LoadLibrary または DllGetClassObject を 呼び出す前にアクティブ化することに注意してください。 この機能は既に Windows に存在します。これを実装するためにクライアント コードは必要ありません。

COM クラスは、レジストリを経由せずに、ホストされたコンポーネントによってエクスポートできます。 複数のコンポーネントで異なる COM オブジェクトに対して同じ ProgID を公開できます。ホスティング アプリケーションは、適切なアクティブ化コンテキストのみを検索し、 CLSIDFromProgIDCoCreateInstance を使用してホストオブジェクトのインターフェイス ポインターを取得する必要があります。