CPersistStream 类

[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayerIMFMediaEngine媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

cpersiststream 类层次结构

CPersistStream 是筛选器的持久属性的基类, (即保存的图形) 中的筛选器属性。

最简单的使用 CPersistStream 方法是:

  1. 安排筛选器继承此类。

  2. 在类中实现 WriteToStreamReadFromStream 。 这些函数将替代此处的函数,这些函数只充当占位符。

  3. 更改 NonDelegatingQueryInterface 以处理 IPersistStream

  4. 实现 SizeMax 以返回所保存数据字节数的上限。

    如果保存 Unicode™ 数据,请记住 WCHAR 为 2 个字节。

  5. 数据更改时,调用 SetDirty

版本号

在某个时候,你可能会决定更改或扩展数据的格式。 然后,你希望所有旧保存的流中都有一个版本号,以便在阅读这些流时知道它们是旧表单还是新表单。 为了帮助你,此类会编写和读取版本号。 写入时,它会调用 GetSoftwareVersion 来查询当前使用的软件版本。 (实际上,这是 file 中数据布局的版本号。) 它首先将此内容写入数据。 如果要更改版本,请实现 (替代) GetSoftwareVersion。 它会在调用 ReadFromStream 之前将文件中的版本号读入mPS_dwFileVersion,因此在 ReadFromStream 中,可以检查mPS_dwFileVersion以查看是否正在读取旧版本文件。 通常,应接受版本不高于正在读取它们的软件版本的文件。

CPersistStream 实现 IPersistStream。 有关更多实现信息,请参阅 Microsoft 平台 SDK 中的 COM 参考。

受保护的数据成员 说明
mPS_dwFileVersion 文件的版本号。
mPS_fDirty 必须保存此流的数据。
成员函数 说明
CPersistStream 构造 CPersistStream 对象。
SetDirty 指示对象必须保存到流中。
可重写的成员函数 说明
GetClassID 检索此流的类标识符。
GetSoftwareVersion 检索此文件格式的版本号。
ReadFromStream 从流中读取筛选器的数据。
SizeMax 检索不包括版本号) 的数据 (所需的字节数。
WriteToStream 将筛选器的数据写入流。
IPersistStream 方法 说明
GetSizeMax 检索数据 ((包括版本号) )所需的字节数。
IsDirty 检查是否必须保存对象。
加载 将数据从流加载到内存中。
保存 将数据从内存保存到流。