管理属性
每个属性都包含一个 属性标识符 (在其属性集) 中唯一、 (VT 或 VarType) 标记的变体 类型(表示值的类型)以及 值 本身。 变量类型标记描述值中的数据表示形式。 此外,还可以为属性分配可用于标识属性的 字符串名称 ,而不是使用所需的数字属性标识符 (ID) 。 为了创建和管理属性,COM 定义了 IPropertyStorage 接口。
IPropertyStorage 接口包括用于读取和写入属性或属性名称数组的方法。 接口包括与同名的 IStorage 方法类似的 Commit 和 Revert 方法。 可以使用实用工具方法设置 (CLSID) 属性集的类标识符,设置与该集关联的时间,以及获取有关属性集的统计信息。 最后, Enum 方法创建一个枚举器,并返回指向其 IEnumSTATPROPSTG 接口的 指针。 可以调用此接口的方法来枚举对象上的 STATPROPSTG 结构,这将提供有关当前属性集中所有属性的信息。
下面是属性的表示方式的示例。 如果属性集中的特定属性包含动物的科学名称,该名称可以存储为以零结尾的字符串。 与名称一起存储的将是一个类型指示器,用于指示该值是一个以零结尾的字符串。 这些属性可能具有以下特征:
属性 ID | 字符串标识符 | 类型指示符 | 表示的值 |
---|---|---|---|
02 | PID_ANIMALNAME | VT_LPWSTR | 以零结尾的 Unicode 字符串 |
03 | PID_LEGCOUNT | VT_I2 | WORD |
识别属性集格式(通过其格式标识符 (FMTID) )的任何应用程序都可以查看标识符为 PID_ANIMALNAME 的属性,确定它是以零结尾的字符串,以及读取和写入值。 尽管应用程序可以调用 IPropertyStorage::ReadMultiple 来读取 (先获取指针) 的任何或所有属性集,但应用程序必须知道如何解释属性集。
属性值作为 PROPVARIANT 类型的实例通过属性接口传递。
必须区分这些存储 (持久性) 属性和运行时属性。 变量类型值常量的名称以 VT_ 开头。 但是,有效的 PROPVARIANT 集并不完全等效于自动化和 ActiveX 控件中使用的 VARIANT 集。
这两个结构之间的唯一区别是每个结构中允许的一组VT_ (变量类型/VarType) 标记。 如果某个属性类型可以在 VARIANT 和 PROPVARIANT 中使用,则 (VT_值的类型标记) 始终具有相同的值。 此外,对于给定VT_值,在 VARIANT 和 PROPVARIANT 中使用的内存中表示形式是相同的。 综合起来,此方法允许类型系统捕获不允许的类型标记,同时允许知识渊博的客户端在适当的时候实现指针强制转换。
有关详细信息,请参阅以下部分 属性存储注意事项。