Dictionnaire de noms d’affichage du jeu de propriétés
Un dictionnaire de noms complets de propriétés permet aux utilisateurs du jeu de propriétés d’attacher une signification aux propriétés, au-delà de celles fournies par l’indicateur de type.
Le dictionnaire contient un nombre d’entrées dans la liste, suivi d’une liste d’entrées de dictionnaire.
typedef struct tagDICTIONARY
{
DWORD cEntries ; // Count of entries in the list
ENTRY rgEntry[ cEntries ] ; // Property ID/String pair
} DICTIONARY ;
Chaque entrée de dictionnaire dans la liste est une paire Identificateur de propriété/Chaîne. Voici une définition de pseudo-structure pour une entrée de dictionnaire. Il s’agit d’une pseudo-structure, car le membre sz[] est de taille variable.
typedef struct tagENTRY
{
DWORD propid ; // Property ID
DWORD cch ; // Count of characters in the string
char sz[cch]; // Zero-terminated string
} ENTRY ;
L’exemple de transfert de données boursières suivant peut inclure un nom affichable « Cotation boursière » pour l’ensemble et « Symbole de graduation » pour PID_SYMBOL. Si un jeu de propriétés ne contenait qu’un symbole et le dictionnaire, la section du jeu de propriétés aurait un flux d’octets semblable à ce qui suit.
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.
Tenez compte des problèmes suivants concernant les dictionnaires d’ensembles de propriétés :
- L’ID de propriété 0 n’a pas d’indicateur de type. Le type de données DWORD qui indique le nombre d’entrées se trouve à la position de l’indicateur de type.
- Le nombre de caractères dans la chaîne cch inclut le caractère zéro qui termine la chaîne. Lorsque la page de code du jeu de propriétés n’est pas Unicode, ce champ est en fait un nombre d’octets . Pour les jeux de propriétés dont le format est 0, ce nombre ne peut pas dépasser 256. Pour les jeux de propriétés avec une version de format de 1, ce nombre peut être aussi élevé que ce qui est autorisé par la taille totale du jeu de propriétés.
- Le dictionnaire est facultatif. Tous les noms des propriétés de l’ensemble ne sont pas obligatoires pour apparaître dans le dictionnaire. À l’inverse, tous les noms du dictionnaire ne sont pas requis pour correspondre aux propriétés de l’ensemble. Le dictionnaire doit omettre les entrées pour les propriétés supposées être reconnues universellement par les applications manipulant le jeu de propriétés. En règle générale, les noms des jeux de propriétés de base pour les normes largement acceptées sont omis, mais les jeux de propriétés à usage spécial peuvent inclure des dictionnaires à utiliser par les navigateurs.
- Les noms de propriétés dans le dictionnaire sont stockés dans la page de codes indiquée par l’ID de propriété 1. Pour les pages de codes ANSI, chaque entrée de dictionnaire est alignée sur les octets. Par conséquent, il n’existe aucun espacement entre les noms de propriétés avec l’ID de propriété 0. Il s’agit du seul cas où les valeurs des types de données DWORD (l’ID de propriété et les DWORDde longueur du nom de la propriété) ne doivent pas nécessairement être alignées sur les limites 32 bits. Pour les pages Unicode, chaque entrée de dictionnaire est alignée sur 32 bits.
- Les noms de propriétés qui commencent par les caractères Unicode binaires 0x0001 par 0x001F sont réservés pour une utilisation ultérieure.
- Le nom de propriété associé à l’ID de propriété 0 représente le nom de l’ensemble du jeu de propriétés.