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.