类型指示器

实际属性遵循属性标识符/偏移对属性集值表。 每个属性存储为 DWORD,后跟数据类型值。

类型指示器及其关联值在 PROPVARIANT 结构中描述。

所有类型/值对必须在 32 位边界上开始。 因此,值后跟 null 字节,以对齐 32 位边界上的后续配对。

以下示例代码根据给定的字节计数计算在 32 位边界上对齐所需的字节数。

cbAdd = (((cbCurrent + 3) >> 2) << 2) - cbCurrent ;

在值的向量中,小于 32 位的简单标量值的每个重复都必须与其自然对齐而不是 32 位对齐。 实际上, 这对类型VT_UI1VT_UI2VT_I2VT_BOOL具有 一字节或两字节自然对齐) (而言非常重要。 所有其他类型都具有四字节的自然对齐方式。 例如,某些类型(例如 VT_R8)实际上具有 8 字节的自然对齐方式,但存储方式与它们具有四字节对齐一样。

具有类型指示器VT_I2 | 的属性值VT_VECTOR包括:

  • DWORD 元素计数。
  • 一系列打包的双字节整数,它们之间没有空填充。

重要

作为向量属性元素的一部分存储的任何 32 位计数或属性类型也必须是 32 位对齐的。

 

类型标识符VT_LPSTR | 的属性值VT_VECTOR包括:

  • DWORD 元素计数 (DWORDcElems) 。
  • 一系列字符串 (charrgch[]) ,每个字符串前面都有长度计数 DWORD,可能后跟 null 填充以舍入到 32 位边界。