PROPSETFLAG 常量

PROPSETFLAG 常量定义属性集的特征。 下表中列出的值用于 IPropertySetStorage 方法的 grfFlags 参数、StgCreatePropStg 函数和 StgOpenPropStg 函数。

常量/值 说明
PROPSETFLAG_DEFAULT
0
如果未指定,则默认情况下只能将简单属性值写入属性集。 使用简单属性值可防止属性集在 IPropertySetStorage 的复合文件和独立实现中被事务处理。 非 e 属性值必须用于此目的。
PROPSETFLAG_NONSIMPLE
1
如果指定,则可以将非简单属性值写入属性集,并将属性集保存在存储对象中。 非简单属性值包括 VARTYPE 为 VT_STORAGE、VT_STREAM、VT_STORED_OBJECT 或 VT_STREAMED_OBJECT 的属性值。 如果未指定此标志,则无法将非简单类型写入属性集。 在复合文件和独立实现中,仅当指定 了 PROPSETFLAG_NONSIMPLE 时,属性集才能交易。
PROPSETFLAG_ANSI
2
如果指定,则属性集中不是显式 Unicode 的所有字符串值(即除 VT_LPWSTR 以外的值)都与当前系统 ANSI 代码页一起存储。 有关详细信息,请参阅 GetACP。 不建议使用此值。 有关详细信息,请参阅“备注”。
如果此值不存在,则新属性集中的字符串值存储在 Unicode 中。 此值提供的控制程度是必需的,以便使用与属性相关的接口的客户端可以与标准属性集(例如可能存在于 ANSI 代码页中的 OLE2 摘要信息)互操作。
PROPSETFLAG_UNBUFFERED
4
仅用于 StgCreatePropStgStgOpenPropStg 函数;也就是说,在属性集接口的独立实现中。 如果在这些函数中指定,则不会缓冲对属性集的更改。 相反,更改始终直接写入属性集。 调用属性集 IPropertyStorage 方法将更改它。 但是,默认情况下,更改将缓冲在内部属性集缓存中,并在调用 IPropertyStorage::Commit 方法时写入属性集。
设置 PROPSETFLAG_UNBUFFERED 会降低性能,因为每次更改属性集后都会自动刷新属性集内部缓冲区。 但是,直接写入更改将防止出现协调问题。 例如,如果在事务处理模式下打开存储对象,并且缓冲属性集。 然后,如果对存储对象调用 IStorage::Commit 方法,属性集更改将不会作为事务的一部分进行选取,因为它们位于尚未刷新的缓冲区中。 必须在调用 IStorage::Commit 之前调用 IPropertyStorage::Commit,以在将更改提交到存储之前刷新属性集缓冲区。 作为进行两次调用的替代方法,可以设置 PROPSETFLAG_UNBUFFERED ,以便始终将更改直接写入属性集,并且永远不会在属性集的内部缓存中缓冲。 然后,在提交事务处理存储时,将选取更改。
PROPSETFLAG_CASE_SENSITIVE
8
如果指定,则属性名称区分大小写。 区分大小写的属性名称只能在版本 1 属性集序列化格式中使用。 有关详细信息,请参阅 属性集序列化

备注

可以使用确定如何创建和打开属性集的按位运算来设置和检查这些值。 使用 IPropertySetStorage::Create 方法或 StgCreatePropStg 函数创建属性集。 它们使用 IPropertySetStorage::Open 方法或 StgOpenPropStg 函数打开。

建议不设置 grfFlags 参数中的 PROPSETFLAG_ANSI 标志,将属性集创建为 Unicode。 此外,建议避免使用VT_LPSTR值,改用VT_LPWSTR值。 当属性集代码页为 Unicode 时,VT_LPSTR字符串值在存储时转换为 Unicode,并在检索时转换回多字节字符串值。 当属性集的代码页不是 Unicode 时,属性名称、VT_BSTR字符串和非简单属性值在存储时将转换为多字节字符串,并在检索时转换回 Unicode,所有这些都使用当前系统 ANSI 代码页。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Propidl.h

请参阅

FmtIdToPropStgName

IPropertySetStorage::Create

IPropertySetStorage::Open

PropStgNameToFmtId

StgCreatePropSetStg

StgCreatePropStg

StgOpenPropStg