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