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


Класс CPersistStream

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

иерархия классов cpersiststream

CPersistStream — это базовый класс для постоянных свойств фильтров (то есть свойств фильтра в сохраненных графах).

Простейшим способом использования CPersistStream является:

  1. Упорядочите фильтр для наследования этого класса.

  2. Реализуйте WriteToStream и ReadFromStream в классе. Они переопределяют функции, которые не выполняют никаких действий, кроме как заполнители.

  3. Измените nonDelegatingQueryInterface для обработки IPersistStream.

  4. Реализуйте SizeMax , чтобы вернуть верхнюю границу количества байтов сохраненных данных.

    Если вы сохраняете данные Юникода™, помните, что WCHAR составляет 2 байта.

  5. При изменении данных вызовите SetDirty.

Номера версий

В какой-то момент вы можете изменить или расширить формат данных. Затем вам потребуется номер версии во всех старых сохраненных потоках, чтобы вы могли определить, когда вы читаете их, представляют ли они старую или новую форму. Чтобы помочь вам, этот класс записывает и считывает номер версии. При записи он вызывает GetSoftwareVersion , чтобы узнать о версии используемого в данный момент программного обеспечения. (Фактически это номер версии макета данных в файле.) Он записывает это как первое, что происходит в данных. Если вы хотите изменить версию, реализуйте (переопределите) GetSoftwareVersion. Он считывает номер версии из файла в mPS_dwFileVersion перед вызовом ReadFromStream, поэтому в ReadFromStream можно проверка mPS_dwFileVersion, чтобы узнать, читаете ли вы старый файл версии. Обычно следует принимать файлы, версия которых не является более новой, чем версия программного обеспечения, считывающая их.

CPersistStream реализует IPersistStream. Дополнительные сведения о реализации см. в справочнике по COM в пакете SDK для платформы Майкрософт.

Защищенные члены данных Описание
mPS_dwFileVersion Номер версии файла.
mPS_fDirty Данные для этого потока должны быть сохранены.
Функции элементов Описание
CPersistStream Создает объект CPersistStream .
SetDirty Указывает, что объект должен быть сохранен в потоке.
Переопределимые функции-члены Описание
GetClassID Извлекает идентификатор класса этого потока.
GetSoftwareVersion Извлекает номер версии для этого формата файла.
ReadFromStream Считывает данные фильтра из потока.
SizeMax Извлекает количество байтов, необходимых для данных (не включая номер версии).
WriteToStream Записывает данные фильтра в поток.
Методы IPersistStream Описание
GetSizeMax Извлекает количество байтов, необходимое для данных (включая номер версии).
IsDirty Проверяет, нужно ли сохранить объект.
Загрузить Загружает данные из потока в память.
Сохранить Сохраняет данные из памяти в поток.