属性集的存储和流对象

程序员指定在创建属性集时,属性集是存储在存储中还是存储在流中。 PROPSETFLAG_NONSIMPLE 枚举值(在 grfFlags 参数中传递到 IPropertySetStorage::Create 方法)指示这一点。 设置属性集的存储位置提供适当的应用程序控件,以便通过具有 COM 属性集的 IPropertySetStorage 接口进行完全互操作。

如果设置了PROPSETFLAG_NONSIMPLE标志,则属性集将存储在存储对象中,并且可以将非简单属性值写入其中。 非简单值包括 VARTYPE 为 VT_STORAGE、VT_STREAM、VT_STORED_OBJECT 或 VT_STREAMED_OBJECT 的值。 有关 VARTYPE 值及其用法的详细信息,请参阅 PROPVARIANT 结构。

如果未设置PROPSETFLAG_NONSIMPLE标志,则只能将简单值写入属性集。

在非简单属性集的存储对象中,将创建名为 Contents 的流。 这是属性集的主流,并保存所有简单的属性值。 非简单属性值 (流和存储) 存储在设置为子流和存储的属性的 main 存储对象下。 也就是说,这些非简单值作为同级存储在内容流中。 同级流和存储的名称由 实现确定,存储在内容流中,类似于简单字符串属性的存储方式。