アクティブ化コンテキストを使用すると、COM オブジェクトを登録しなくても使用できます。 これにより、アプリケーションは、レジストリ情報ではなく、バージョンに基づいて異なる機能を持つ複数のコンポーネントを持つことができます。 複数のコンポーネントは、同じ GUID を持つ同じ COM オブジェクトを公開できますが、バージョンに基づいて異なる機能を持ちます。
アプリケーションが CLSIDFromProgIDGUID を要求すると、COM は最初にアクティブなアクティブ化コンテキストで progid から CLSID へのマッピングを検索します。 アプリケーションが CoCreateInstance を使用してインスタンス インターフェイス ポインターを取得すると、COM はアクティブなアクティブ化コンテキストを検索して、CLSID をホストする DLL を見つけます。 アクティブ化コンテキストに必要な情報が含まれていない場合、COM は通常のメソッドを使用してレジストリ内の情報を検索します。
アクティブ化コンテキストはスレッドごとに行われるため、COM は作成スレッドのアクティブ化コンテキストをホスト スレッドにマーシャリングし、ホスト スレッドで LoadLibraryまたは dllGetClassObject呼び出す前にアクティブ化します。 この機能は Windows に既に存在します。クライアント コードは、これを実装するために何もする必要はありません。
COM クラスは、レジストリを経由せずに、ホストされているコンポーネントによってエクスポートできます。 複数のコンポーネントで異なる COM オブジェクトに対して同じ ProgID を公開できます。ホスティング アプリケーションは、適切なアクティブ化コンテキストのみを検索し、CLSIDFromProgIDと CoCreateInstance を使用して、ホストされているオブジェクトのインターフェイス ポインターを取得する必要があります。