IPropertySetStorage-Compound 文件实现
COM 复合文件存储对象实现包括 IPropertyStorage(管理单个永久性属性集的接口)和 IPropertySetStorage(管理持久属性集组的接口)的实现。
若要获取指向 IPropertySetStorage 复合文件实现的指针,请将标识符IID_IStorage的标头定义名称指定为 riid 参数,或使用 StgCreateStorageEx 或 StgOpenStorageEx 函数。 在这两种情况下,请将 STGFMT_STORAGE 指定为 stgfmt 参数。 也可以在 StgOpenStorageEx.) 的情况下指定 (STGFMT_ANY 此外,将接口标识符的标头定义名称指定为 riid 参数 (IID) IID_IPropertySetStorage。 这两个函数都提供指向对象 IPropertySetStorage 接口的 指针。
获取指向复合文件实现的指针的另一种方法是指定标识符的标头定义名称IID_IStorage作为 riid 参数,或使用 StgCreateDocfile 或 StgOpenStorage 函数。 这将提供指向对象 IStorage 接口的指针。 如果要处理永久性属性集,请为 IPropertySetStorage 接口调用 IStorage::QueryInterface。
何时使用 IPropertySetStorage
调用 IPropertySetStorage 的方法,以在当前复合文件属性集存储中创建、打开或删除属性集。 还有一个方法 IPropertySetStorage::Enum,该方法提供指向可用于枚举存储中的属性集的枚举器的指针。
方法
在当前复合文件存储中创建一个新属性集,并在返回时提供指向 IPropertyStorage 复合文件实现的接口指针。 在此实现中,仅当指定PROPSETFLAG_NONSIMPLE时,才能处理属性集。 此方法要求STGM_SHARE_EXCLUSIVE grfMode 参数中指定的共享模式,并且访问模式为STGM_READ或STGM_READWRITE (STGM_WRITE模式不受支持) 。
打开当前属性存储中的现有属性集。 返回时,它提供指向 IPropertyStorage 的复合文件实现的接口指针。 此方法要求STGM_SHARE_EXCLUSIVE grfMode 参数中指定的共享模式,并且) 不支持STGM_READ或STGM_READWRITE (STGM_WRITE访问模式。
删除此属性存储中的属性集。
创建用于枚举 STATPROPSETSTG 结构的 对象。 每个 STATPROPSETSTG 结构都提供有关单个属性集的数据。
备注
从 Windows 2000 开始, IPropertySetStorage 的复合文件实现支持简单模式。 简单模式是通过为 StgCreateStorageEx 和 StgOpenStorageEx 函数指定STGM_SIMPLE标志来指示 的 。 如果在简单模式下打开复合文件,则关联的 IPropertySetStorage 实现将受到限制,如下所示:
- 只能创建简单的属性集。 也就是说,在 iPropertySetStorage::Create 方法的 grfFlags 参数中指定PROPSETFLAG_NONSIMPLE值会导致错误。
- 使用 STGM_SIMPLE 创建 具有 StgCreateStorageEx 的复合文件并查询 IPropertySetStorage 接口后,只能调用 IPropertySetStorage::Create 一次。 然后,在再次调用 Create 方法之前,必须释放 IPropertyStorage 接口。 有关简单模式的详细信息,请参阅 STGM 常量。
- 使用 StgCreateStorageEx 创建存储对象后,不能使用 IPropertySetStorage::Open 方法打开属性集。 相反,在查询 IPropertySetStorage 并调用 Open 方法之前,必须使用 StgOpenStorageEx。
- 使用 STGM_SIMPLE 标志使用 StgOpenStorageEx 打开复合文件并查询 IPropertySetStorage 接口后,可以使用 IPropertySetStorage::Open 一次打开一个属性集。 此外,在属性集处于打开状态时,可能无法增加属性集的总大小。
无法处理简单属性集。 除非还在 grfFlags 参数中指定PROPSETFLAG_NONSIMPLE,否则不能在 Create 和 Open 方法的 grfmode 参数中指定STGM_TRANSACTED。 请注意,简单和非简单属性集与上述简单模式属性集无关。 有关简单和非简单属性集的详细信息,请参阅 属性集的存储和流对象。
注意
DocumentSummaryInformation 和 UserDefined 属性集是唯一的,因为它们可能具有两个属性集部分。 有关详细信息,请参阅 DocumentSummaryInformation 和用户定义属性集。
相关主题