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