Поделиться через


Реализация IUnknown

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]

Microsoft DirectShow основан на компонентной объектной модели (COM). Если вы пишете собственный фильтр, его необходимо реализовать как COM-объект. Базовые классы DirectShow предоставляют платформу для этого. Использование базовых классов не требуется, но может упростить процесс разработки. В этой статье описываются некоторые внутренние сведения о COM-объектах и их реализация в базовых классах DirectShow.

В этой статье предполагается, что вы знаете, как программировать клиентские приложения COM, другими словами, понимаете методы в IUnknown, но не предполагается, что какой-либо предыдущий опыт разработки COM-объектов. DirectShow обрабатывает многие детали разработки COM-объекта. Если у вас есть опыт разработки COM-объектов, ознакомьтесь с разделом Использование CUnknown, в котором описывается базовый класс CUnknown .

COM — это спецификация, а не реализация. Он определяет правила, которым должен следовать компонент; Ввод этих правил в действие остается на разработчика. В DirectShow все объекты являются производными от набора базовых классов C++. Конструкторы и методы базового класса выполняют большую часть работы по "бухгалтерскому учету" COM, например, поддержание согласованного количества ссылок. Наследуя фильтр от базового класса, вы наследуете функциональные возможности класса . Чтобы эффективно использовать базовые классы, необходимо общее представление о том, как они реализуют спецификацию COM.

Эта статья содержит следующие разделы.

DirectShow и COM