Сериализация набора свойств
Существует две версии формата сериализации набора свойств. Исходная спецификация описывает версию 0 формата. Дополнительные сведения см. в разделе Формат версии . Версия 1 расширяет исходную версию. Все наборы свойств версии 0 допустимы как наборы свойств версии 1. Поле Формат версии в заголовке сериализованного набора свойств указывает версию.
Следующие элементы определяют различия между форматами сериализации наборов свойств версии 0 и версии 1.
Поддержка новых значений VARTYPE . Дополнительные сведения о значениях VARTYPE и их использовании см. в разделе Типы и структуры данных IDispatch и структура PROPVARIANT .
Следующие значения VARTYPE не поддерживаются в наборах свойств версии 0, но поддерживаются в версии 1:
VT_I1
VT_VECTOR | VT_I1
VT_INT
VT_UINT
VT_DECIMAL
Кроме того, SafeArrays можно сериализовать в наборе свойств. На наличие SafeArray указывает VT_ARRAY бит, объединенный с помощью операции OR , с элементами массива в элементе vt структуры PROPVARIANT . Например, safeArray из 4-байтовых целых чисел со знаком имеет тип VT_ARRAY | VT_I4.
Для SafeArray в сериализованном наборе свойств допустимы следующие типы элементов:
VT_I1 VT_UI1 VT_I2 VT_UI2 VT_I4 VT_UI4 VT_INT VT_UINT VT_R4 VT_R8 VT_CY VT_DATE VT_BSTR VT_BOOL. VT_DECIMAL VT_ERROR VT_VARIANT Если указан тип данных VT_VARIANT, это означает, что сам safeArray содержит структуры PROPVARIANT . Типы для этих элементов должны быть из предыдущего списка, за исключением того, что они не могут содержать вложенные типы VT_VARIANT.
Обратите внимание, что реализации IPropertyStorage должны иметь возможность корректного восстановления, возвращая ошибку при обнаружении нового типа. например, типы VARENUM.
Имена свойств с учетом регистра. Имена свойств, например указанные в методе IPropertyStorage::WritePropertyNames , не чувствительны к регистру в наборах свойств версии 0. В наборах свойств версии 1 имена свойств могут учитывать регистр в зависимости от значения нового свойства Behavior.
Свойство Behavior — идентификатор свойства 0x80000003 с типом VT_UI4. Если задан наименьший бит этого значения, в именах наборов свойств учитывается регистр. Задайте флаг PROPSETFLAG_CASE_SENSITIVE в параметре grfFlags метода IPropertySetStorage::Create , чтобы указать набор свойств с учетом регистра.
Длинные имена свойств. Имена свойств для наборов свойств версии 0 не должны превышать 256 символов, включая признак конца строки, для наборов свойств на кодовой странице Юникода. Если они отсутствуют на кодовой странице Юникода, они должны быть меньше 256 байт. С другой стороны, наборы свойств версии 1 могут иметь имена свойств неограниченной длины, хотя они по-прежнему ограничены общим ограничением размера набора свойств в 256 килобайт (КБ).
Рекомендуется, чтобы реализации IPropertyStorage создавали и поддерживали наборы свойств версии 0 по умолчанию. Если вызывающий объект впоследствии запрашивает функцию, относясь к формату версии 1, только тогда следует обновить версию набора свойств. Например, если записывается свойство типа VT_ARRAY или если записывается длинное имя свойства, то реализация должна обновить формат набора свойств до версии 1. Одно из исключений из этого руководства возникает, если значение перечисления PROPSETFLAG_CASE_SENSITIVE указано в вызове метода IPropertySetStorage::Create. В этом случае набор свойств должен быть создан как набор свойств версии 1.