アクティブ化オブジェクト
アクティブ化オブジェクト は、クラス ファクトリに似た別のオブジェクトを作成するために使用されるヘルパー オブジェクトです。 アクティブ化オブジェクトは、IMFActivateインターフェイス公開します。
アクティブ化オブジェクトを使用すると、ターゲット オブジェクトを作成せずに IMFActivateポインター保持できるため、ターゲット オブジェクトの作成を延期できます。 アクティブ化オブジェクトはシリアル化することもできるため、別のプロセスでターゲット オブジェクトを作成するために使用できます。 たとえば、アクティブ化オブジェクトは、アプリケーション プロセスから保護されたメディア パス (PMP) プロセスにパイプライン コンポーネントをマーシャリングするために使用されます。 アクティブ化オブジェクトは、IMFActivate ポインターの一覧 返す特定の列挙関数でも使用されます。 アプリケーションは、ターゲット オブジェクトを作成する前に、アクティブ化オブジェクトの属性を調べることで、オブジェクトに関する情報を取得できます。
アクティブ化オブジェクトからターゲット オブジェクトを作成するには、IMFActivate::ActivateObject メソッドを呼び出します。 呼び出し元は、作成 オブジェクトを使用して完了したときに、IMFActivate::ShutdownObject を呼び出す必要があります。 多くの場合、アプリケーションはアクティブ化オブジェクトを作成し、メディア セッションは ActivateObject 呼び出します。 その場合、アプリケーションではなくメディア セッションが ShutdownObject 呼び出す必要があります。 その他の状況では、アプリケーションはメディア セッションから IMFActivate ポインターを受け取り、アプリケーションは ActivateObject 呼び出し、ShutdownObject をします。 (たとえば、「保護されたメディア ファイルを再生する方法」を参照してください)。
アクティブ化オブジェクトは属性を持つ場合があり、IMFActivate インターフェイスは、IMFAttributes インターフェイスを継承します。 一部のアクティブ化オブジェクトは、作成されたオブジェクトを構成するために属性を使用します。 各オブジェクトでサポートされる特定の属性については、そのアクティブ化オブジェクトの作成関数のリファレンスに記載されています。 関数から受け取る IMFActivate ポインターを使用して属性を設定します。
保護された再生の場合、アクティブ化オブジェクトは PMP プロセスにマーシャリングされます。 マーシャリングをサポートするには、アクティブ化オブジェクトが IPersistStream インターフェイス を公開する必要があります。 さらに、PMP が保護されたプロセスで実行されている場合は、アクティブ化オブジェクトと作成されたオブジェクトの両方が信頼できるコンポーネントである必要があります。 これは、保護されていないプロセスで PMP が読み込まれる場合の要件ではありません。
PMP プロセス内でカスタム パイプライン オブジェクト (メディア シンクなど) を使用するには、パイプライン オブジェクトのアクティブ化オブジェクトを実装する必要があります。
- アクティブ化オブジェクトは、IMFActivate公開し、IPersistStream をする必要があります。
- アクティブ化オブジェクトの IPersist::GetClassID メソッドは、アクティブ化オブジェクトの CLSID を返す必要があります。
- 必要に応じて、IPersistStream::Save を実装し、IPersistStream::Load メソッドを して、アクティブ化オブジェクトを構成するために必要なデータをマーシャリングできます。
メディア セッションは、PMP プロセス内でトポロジを読み込むときに、CoCreateInstance を呼び出して、アクティブ化オブジェクトの新しいインスタンスを作成します。 その後、IMFActivate::ActivateObject呼び出してパイプライン オブジェクトを作成します。
関連トピック