CPersistStream 类
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
CPersistStream
是筛选器的持久属性的基类, (即保存的图形) 中的筛选器属性。
最简单的使用 CPersistStream
方法是:
安排筛选器继承此类。
在类中实现 WriteToStream 和 ReadFromStream 。 这些函数将替代此处的函数,这些函数只充当占位符。
更改 NonDelegatingQueryInterface 以处理 IPersistStream。
实现 SizeMax 以返回所保存数据字节数的上限。
如果保存 Unicode™ 数据,请记住 WCHAR 为 2 个字节。
数据更改时,调用 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 | 检查是否必须保存对象。 |
加载 | 将数据从流加载到内存中。 |
保存 | 将数据从内存保存到流。 |