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


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

Существует две версии формата сериализации набора свойств. Исходная спецификация описывает версию 0 формата. Дополнительные сведения см. в версии форматирования. Версия 1 расширяет исходную версию. Все наборы свойств версии 0 допустимы как наборы свойств версии 1. Поле формата версии в заголовке сериализованного набора свойств указывает версию.

Следующие элементы определяют различия между форматами сериализации набора свойств версии 0 и версии 1.

  • Поддержка новых значений VARTYPE. Дополнительные сведения о значениях VARTYPE и их использовании см. в разделе IDispatch Data Types and Structure и структуре PROPVARIANT.

    Следующие значения VARTYPE не поддерживаются в наборах свойств версии 0, но поддерживаются в версии 1.

    VT_I1

    VT_VECTOR | VT_I1

    VT_INT

    VT_UINT

    VT_DECIMAL

    Кроме того, SafeArrays можно сериализовать в наборе свойств. Наличие safeArray указывается VT_ARRAY битом, используя операцию OR с элементами массива в элементе vt структуры PROPVARIAN T. Например, 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.

    Свойство "Поведение" — это идентификатор свойства 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.