类型指示器

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

PROPVARIANT 结构中介绍了类型指示器及其关联值。

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

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

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

在值的向量内,小于 32 位的简单标量值的每次重复都必须与其自然对齐方式(而不是 32 位对齐)对齐。 实际上,这仅对于 VT_UI1VT_UI2VT_I2具有 1 字节或 2 字节自然对齐) VT_BOOL (而言重要。 所有其他类型都具有四字节的自然对齐方式。 某些类型(例如 ,VT_R8)实际上具有 8 字节的自然对齐方式,但存储方式就像具有 4 字节对齐一样。

类型指示 符VT_I2 | VT_VECTOR 的属性值包括:

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

重要

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

 

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

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