Объекты активации

Объект активации — это вспомогательный объект, который используется для создания другого объекта, несколько похожего на фабрику классов. Объекты активации предоставляют интерфейс 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 для создания объекта конвейера.

API платформы Media Foundation

IMFActivate