Compartir a través de


Diccionario de nombres para mostrar del conjunto de propiedades

Un diccionario de nombres para mostrar de propiedades permite que los usuarios del conjunto de propiedades adjunten significado a las propiedades, más allá de las proporcionadas por el indicador de tipo.

Estructura del diccionario

El diccionario contiene un recuento de entradas de la lista, seguidas de una lista de entradas de diccionario.

typedef struct tagDICTIONARY 
{ 
    DWORD  cEntries ;               // Count of entries in the list 
    ENTRY  rgEntry[ cEntries ] ;    // Property ID/String pair 
} DICTIONARY ;

Estructura de entrada de diccionario

Cada entrada de diccionario de la lista es un par identificador de propiedad/cadena. A continuación se muestra una definición de pseudoestructuración para una entrada de diccionario. Es una pseudoestructura porque el miembro sz[] es variable de tamaño.

typedef struct tagENTRY 
{ 
    DWORD  propid ;    // Property ID 
    DWORD  cch ;       // Count of characters in the string 
    char  sz[cch];     // Zero-terminated string 
} ENTRY ;

Diccionario de ejemplo

El siguiente ejemplo de transferencia de datos de mercado de valores podría incluir un nombre para mostrar "Cotización bursátil" para todo el conjunto y "Símbolo de tic" para PID_SYMBOL. Si un conjunto de propiedades contenía solo un símbolo y el diccionario, la sección del conjunto de propiedades tendría una secuencia de bytes similar a la siguiente.

Offset     Bytes 
; Start of section 
0000    5C 01 00 00    ; DWORD size of section 
0004    04 00 00 00    ; DWORD number of properties in section 
 
; Start of PropID/Offset pairs 
0008    01 00 00 00    ; DWORD Property ID (1 == code page) 
000C    28 00 00 00    ; DWORD offset to property ID 
0010    00 00 00 80    ; DWORD Property ID (0x80000000 == locale
                                                 ID) 
0014    30 00 00 00    ; DWORD offset to property ID 
0018    00 00 00 00    ; DWORD Property ID (0 == dictionary) 
001C    38 00 00 00    ; DWORD offset to property ID 
0020    07 00 00 00    ; DWORD Property ID (7 == PID_SYMBOL)
0024    5C 01 00 00    ; DWORD offset to property ID
 
; Start of Property 1 (code page)
0028    01 00 00 00    ; DWORD type indicator (VT_12)
002C    B0 04          ; USHORT codepage (0x04b0 == 1200 ==
                                                 unicode)
002E    00 00          ; Pad to 32-bit boundary
 
; Start of Property 0x80000000 (Local ID)
0030    13 00 00 00    ; DWORD type indicator (VT_U14)
0034    09 04 00 00    ; ULONG locale ID (0x0409 == American 
                                                 English)
 
; Start of Property 0 (the dictionary)
0038    08 00 00 00    ; DWORD number of entries in dictionary
                             (Note:  No type indicator)
003C    00 00 00 00    ; DWORD propid == 0 (the dictionary)
0040    0C 00 00 00    ; DWORD cch == wcslen(L"Stock Quote") +
                                                 sizeof(L'\0') == 12
0044    L"Stock Quote" ; wchar_t wsz(12)
005C    05 00 00 00    ; DWORD propid == 5 (PID_HIGH)
0060    0B 00 00 00    ; DWORD cch == wcslen(L"High Price") + 
                                                 sizeof(L'\0') == 11
0064    L"High Price\0"; wchar_t wsz(11)
007A    00 00          ; padding for 32-bit alignment (necessary
                             because the codepage is unicode)
007C    07 00 00 00    ; DWORD propid == 7 (PID_SYMBOL)
0080    0E 00 00 00    ; DWORD cch - wcslen(L"Ticker Symbol\0") 
                             == 14
0084    L"Ticker Symbol\0" ; wchar_t wsz(14)
 
    // The dictionary would continue, but may not contain entries 
    // for every possible property, and may contain entries for 
    // properties that are not present. Entries are not required  
    // to be in order.

Tenga en cuenta los siguientes problemas relacionados con los diccionarios de conjuntos de propiedades:

  • El identificador de propiedad 0 no tiene un indicador de tipo. El tipo de datos DWORD que indica el recuento de entradas se encuentra en la posición del indicador de tipo.
  • El recuento de caracteres de la cadena cch incluye el carácter cero que finaliza la cadena. Cuando la página de códigos del conjunto de propiedades no es Unicode, este campo es realmente un recuento de bytes . En el caso de los conjuntos de propiedades con una versión de formato 0, este recuento no puede superar los 256. En el caso de los conjuntos de propiedades con una versión de formato de 1, este recuento puede ser tan grande como lo permite el tamaño total del conjunto de propiedades.
  • El diccionario es opcional. No todos los nombres de las propiedades del conjunto deben aparecer en el diccionario. Por el contrario, no todos los nombres del diccionario son necesarios para corresponder a las propiedades del conjunto. El diccionario debe omitir las entradas de las propiedades que se supone que son reconocidas universalmente por las aplicaciones que manipulan el conjunto de propiedades. Normalmente, se omiten los nombres de los conjuntos de propiedades base para estándares ampliamente aceptados, pero los conjuntos de propiedades de propósito especial pueden incluir diccionarios para su uso por parte de los exploradores.
  • Los nombres de propiedad del diccionario se almacenan en la página de códigos indicada por id. de propiedad 1. Para las páginas de códigos ANSI, cada entrada de diccionario está alineada por bytes. Por lo tanto, no hay espaciado entre los nombres de propiedad con id. de propiedad 0. Este es el único caso en el que no es necesario alinear los valores de los tipos de datos DWORD (id. de propiedad y DWORDde longitud de nombre de propiedad) en los límites de 32 bits. Para las páginas Unicode, cada entrada de diccionario está alineada de 32 bits.
  • Los nombres de propiedad que comienzan con los caracteres Unicode binarios 0x0001 a través de 0x001F están reservados para su uso futuro.
  • El nombre de propiedad asociado al id. de propiedad 0 representa el nombre de todo el conjunto de propiedades.