Serialización del conjunto de propiedades

Hay dos versiones del formato de serialización del conjunto de propiedades. La especificación original describe la versión 0 del formato. Consulte Format Version (Formato de versión ) para obtener más información. La versión 1 amplía la versión original. Todos los conjuntos de propiedades de la versión 0 son válidos como conjuntos de propiedades de la versión 1. El campo Format Version (Formato de versión ) del encabezado de un conjunto de propiedades serializado indica la versión.

Los siguientes elementos identifican las diferencias entre los formatos de serialización del conjunto de propiedades de la versión 0 y la versión 1.

  • Compatibilidad con nuevos valores VARTYPE . Para obtener más información sobre los valores VARTYPE y cómo usarlos, vea el tema IDispatch Data Types and Structures (Tipos de datos y estructuras de IDispatch ) y la estructura PROPVARIANT .

    Los siguientes valores VARTYPE no se admiten en los conjuntos de propiedades de la versión 0, pero se admiten en la versión 1:

    VT_I1

    VT_VECTOR | VT_I1

    VT_INT

    VT_UINT

    VT_DECIMAL

    Además, SafeArrays se puede serializar en un conjunto de propiedades. La presencia de safeArray se indica mediante el bit de VT_ARRAY combinado, utilizando una operación OR , con los elementos de matriz en el miembro vt de la estructura PROPVARIANT . Por ejemplo, una safeArray de enteros con signo de 4 bytes tiene un tipo de VT_ARRAY | VT_I4.

    Los siguientes tipos de elementos son válidos para safeArray en un conjunto de propiedades serializadas:

           
    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      
         

    Cuando se especifica el tipo de datos VT_VARIANT, indica que el propio SafeArray contiene estructuras PROPVARIANT . Los tipos de estos elementos deben ser de la lista anterior, salvo que no pueden contener tipos anidados VT_VARIANT.

    Tenga en cuenta que las implementaciones de IPropertyStorage deben poder recuperarse correctamente devolviendo un error cuando se encuentra un nuevo tipo; por ejemplo, tipos VARENUM.

  • Nombres de propiedad que distinguen mayúsculas de minúsculas. Los nombres de propiedad, por ejemplo, los especificados en el método IPropertyStorage::WritePropertyNames , no distinguen mayúsculas de minúsculas en los conjuntos de propiedades de la versión 0. En los conjuntos de propiedades de la versión 1, los nombres de propiedad pueden distinguir mayúsculas de minúsculas en función del valor de la nueva propiedad Behavior.

    La propiedad Behavior es Id. de propiedad 0x80000003 con un tipo de VT_UI4. Si se establece el bit más bajo de este valor, los nombres del conjunto de propiedades distinguen mayúsculas de minúsculas. Establezca la marca PROPSETFLAG_CASE_SENSITIVE en el parámetro grfFlags del método IPropertySetStorage::Create para especificar un conjunto de propiedades que distinguen mayúsculas de minúsculas.

  • Nombres de propiedad largos. Los nombres de propiedad de los conjuntos de propiedades de la versión 0 deben ser menores o iguales a 256 caracteres, incluido el terminador de cadena, para los conjuntos de propiedades de la página de códigos Unicode. Si no está en la página de códigos Unicode, deben tener menos de 256 bytes. Por otro lado, los conjuntos de propiedades de la versión 1 pueden tener nombres de propiedad de longitud ilimitada, aunque todavía están limitados por el límite total de tamaño del conjunto de propiedades de 256 kilobytes (KB).

Se recomienda que las implementaciones de IPropertyStorage creen y mantengan los conjuntos de propiedades de la versión 0 de forma predeterminada. Si un llamador solicita posteriormente una característica específica del formato de la versión 1, solo debe actualizarse la versión del conjunto de propiedades. Por ejemplo, si se escribe una propiedad de tipo VT_ARRAY o si se escribe un nombre de propiedad largo, la implementación debe actualizar el formato del conjunto de propiedades a la versión 1. Se produce una excepción a esta guía si se especifica el valor de enumeración PROPSETFLAG_CASE_SENSITIVE en la llamada a IPropertySetStorage::Create. En este caso, el conjunto de propiedades debe crearse como un conjunto de propiedades de la versión 1.