Objetos de activación
Un objeto de activación es un objeto auxiliar que se usa para crear otro objeto, algo similar a un generador de clases. Los objetos de activación exponen la interfaz IMFActivate .
Un objeto de activación permite aplazar la creación del objeto de destino, ya que se puede mantener en un puntero IMFActivate sin crear el objeto de destino. Los objetos de activación también se pueden serializar y, por tanto, usarse para crear el objeto de destino en otro proceso. Por ejemplo, los objetos de activación se usan para serializar componentes de canalización del proceso de aplicación al proceso de ruta de acceso a medios protegidos (PMP). Los objetos de activación también se usan en determinadas funciones de enumeración que devuelven una lista de punteros IMFActivate . Antes de que la aplicación cree el objeto de destino, puede obtener información sobre el objeto mediante el examen de atributos en el objeto de activación.
Para crear el objeto de destino a partir de un objeto de activación, llame al método IMFActivate::ActivateObject . El autor de la llamada debe llamar a IMFActivate::ShutdownObject cuando haya terminado con el objeto creado. A menudo, la aplicación crea el objeto de activación y la sesión multimedia llama a ActivateObject. En ese caso, la sesión multimedia, no la aplicación, debe llamar a ShutdownObject. En otras situaciones, la aplicación recibe un puntero IMFActivate de la sesión multimedia y la aplicación llama a ActivateObject y ShutdownObject. (Por ejemplo, vea Cómo reproducir archivos multimedia protegidos).
Los objetos de activación pueden tener atributos y la interfaz IMFActivate hereda la interfaz IMFAttributes . Algunos objetos de activación usan atributos para configurar el objeto creado. Los atributos específicos admitidos por cada objeto se documentan en la referencia para la función de creación de ese objeto de activación. Establezca los atributos mediante el puntero IMFActivate que recibe de la función.
Para la reproducción protegida, los objetos de activación se serializarán en el proceso PMP. Para admitir la serialización, un objeto de activación debe exponer la interfaz IPersistStream . Además, tanto el objeto de activación como el objeto creado deben ser componentes de confianza si el PMP se ejecuta en un proceso protegido. Esto no es un requisito cuando el PMP se carga en un proceso desprotegido.
Para usar un objeto de canalización personalizado (como un receptor multimedia) dentro del proceso PMP, debe implementar un objeto de activación para el objeto de canalización:
- El objeto de activación debe exponer IMFActivate e IPersistStream.
- El método IPersist::GetClassID del objeto de activación debe devolver el CLSID del objeto de activación.
- Opcionalmente, puede implementar los métodos IPersistStream::Save e IPersistStream::Load para serializar los datos que necesite para configurar el objeto de activación.
Cuando la sesión multimedia carga la topología dentro del proceso PMP, llama a CoCreateInstance para crear una nueva instancia del objeto de activación. A continuación, llama a IMFActivate::ActivateObject para crear el objeto de canalización.
Temas relacionados