Индикаторы типов

Фактические свойства следуют таблице идентификаторов свойств и значений наборов свойств смещения. Каждое свойство хранится в виде DWORD, за которым следует значение типа данных.

Индикаторы типов и их связанные значения описаны в структуре PROPVARIANT.

Все пары type/Value должны начинаться с 32-разрядной границы. Таким образом, значения могут следовать с байтами NULL, чтобы выровнять следующую пару на 32-разрядной границе.

В следующем примере кода вычисляется, сколько байтов требуется для выравнивания по 32-разрядной границе с учетом количества байтов.

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

Векторе значений каждое повторение простого скалярного значения меньше 32 битов должно соответствовать естественному выравниванию, а не с 32-разрядным выравниванием. На практике это важно только для типов VT_UI1, VT_UI2, VT_I2и VT_BOOL (которые имеют однобайтовое или двухбайтовое естественное выравнивание). Все остальные типы имеют естественное выравнивание с четырьмя байтами. Некоторые типы, например, VT_R8, фактически имеют 8-байтовую естественную выравнивание, но хранятся так же, как если бы они имели выравнивание с четырьмя байтами.

Значение свойства с индикатором типа VT_I2 | VT_VECTOR будет включать:

  • Число элементов DWORD.
  • Последовательность упакованных двухбайтовых целых чисел без заполнения null между ними.

Важный

Все 32-разрядные счетчики или типы свойств, хранящиеся в составе элемента векторного свойства, также должны быть выровнены по 32-биту.

 

Значение свойства идентификатора типа VT_LPSTR | VT_VECTOR будет включать:

  • Число элементов DWORD (DWORDcElems).
  • Последовательность строк (charrgch[]), каждая из которых предшествует числу длин DWORD и, возможно, за ней следует заполнение null до 32-разрядной границы.