Partager via


Objets d’activation

Un objet d’activation est un objet d’assistance utilisé pour créer un autre objet, un peu similaire à une fabrique de classes. Les objets d’activation exposent l’interface IMFActivate.

Un objet d’activation vous permet de différer la création de l’objet cible, car vous pouvez conserver un pointeur IMFActivate sans créer l’objet cible. Les objets d’activation peuvent également être sérialisés et ainsi utilisés pour créer l’objet cible dans un autre processus. Par exemple, les objets d’activation sont utilisés pour marshaler les composants de pipeline du processus d’application vers le processus de chemin d’accès multimédia protégé (PMP). Les objets d’activation sont également utilisés par certaines fonctions d’énumération qui retournent une liste de pointeurs IMFActivate. Avant de créer l’objet cible, l’application peut obtenir des informations sur l’objet en examinant les attributs de l’objet d’activation.

Pour créer l’objet cible à partir d’un objet d’activation, appelez la méthode IMFActivate ::ActivateObject. L’appelant doit appeler IMFActivate ::ShutdownObject lorsqu’il est terminé à l’aide de l’objet créé. Souvent, l’application crée l’objet d’activation, et la session multimédia appelle ActivateObject. Dans ce cas, la session multimédia, et non l’application, doit appeler ShutdownObject. Dans d’autres cas, l’application reçoit un pointeur IMFActivate à partir de la session multimédia, et l’application appelle ActivateObject et ShutdownObject. (Par exemple, consultez Guide pratique pour lire des fichiers multimédias protégés.)

Les objets d’activation peuvent avoir des attributs et l’interface IMFActivate hérite de l’interface IMFAttributes. Certains objets d’activation utilisent des attributs pour configurer l’objet créé. Les attributs spécifiques pris en charge par chaque objet sont documentés dans la référence pour la fonction de création de cet objet d’activation. Définissez les attributs à l’aide du pointeur IMFActivate que vous recevez de la fonction.

Pour la lecture protégée, les objets d’activation sont marshalés vers le processus PMP. Pour prendre en charge le marshaling, un objet d’activation doit exposer l’interface IPersistStream. En outre, l’objet d’activation et l’objet créé doivent être des composants approuvés si le PMP s’exécute dans un processus protégé. Il ne s’agit pas d’une exigence lorsque le PMP est chargé dans un processus non protégé.

Pour utiliser un objet de pipeline personnalisé (tel qu’un récepteur multimédia) à l’intérieur du processus PMP, vous devez implémenter un objet d’activation pour votre objet de pipeline :

  • L’objet d’activation doit exposer IMFActivate et IPersistStream.
  • La méthode IPersist ::GetClassID de l’objet d’activation doit retourner le CLSID de l’objet d’activation.
  • Si vous le souhaitez, vous pouvez implémenter les méthodes IPersistStream ::Save et IPersistStream ::Load pour marshaler les données dont vous avez besoin pour configurer votre objet d’activation.

Lorsque la session multimédia charge la topologie à l’intérieur du processus PMP, elle appelle CoCreateInstance pour créer une instance de votre objet d’activation. Il appelle ensuite IMFActivate ::ActivateObject pour créer l’objet de pipeline.

API Media Foundation Platform

IMFActivate