属性集的存储和流对象

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

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

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

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