Поделиться через


Сериализация набора свойств

Существует две версии формата сериализации набора свойств. Исходная спецификация описывает версию 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.