Set di proprietà Dizionario nome visualizzato
Un dizionario dei nomi visualizzati delle proprietà consente agli utenti di impostare proprietà di allegare il significato alle proprietà, oltre a quelle fornite dall'indicatore di tipo.
Struttura dizionario
Il dizionario contiene un conteggio delle voci nell'elenco, seguito da un elenco di voci del dizionario.
typedef struct tagDICTIONARY
{
DWORD cEntries ; // Count of entries in the list
ENTRY rgEntry[ cEntries ] ; // Property ID/String pair
} DICTIONARY ;
Struttura della voce dizionario
Ogni voce del dizionario nell'elenco è una coppia Identificatore proprietà/Stringa. Di seguito è riportata una definizione di pseudostruttura per una voce di dizionario. È una pseudostruttura perché il membro sz[] è variabile in dimensione.
typedef struct tagENTRY
{
DWORD propid ; // Property ID
DWORD cch ; // Count of characters in the string
char sz[cch]; // Zero-terminated string
} ENTRY ;
Dizionario di esempio
L'esempio di trasferimento dei dati sul mercato azionario seguente potrebbe includere un nome visualizzato "Quote azionarie" per l'intero set e "Simbolo ticker" per PID_SYMBOL. Se un set di proprietà contiene solo un simbolo e il dizionario, la sezione set di proprietà avrà un flusso di byte simile al seguente.
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.
Tenere presente i problemi seguenti relativi ai dizionari del set di proprietà:
- L'ID proprietà 0 non ha un indicatore di tipo. Tipo di dati DWORD che indica il conteggio delle voci si trova nella posizione dell'indicatore di tipo.
- Il numero di caratteri nella stringa cch include il carattere zero che termina la stringa. Quando il codicepage del set di proprietà non è Unicode, questo campo è effettivamente un conteggio di byte . Per i set di proprietà con una versione di formato 0, questo conteggio potrebbe non superare 256. Per i set di proprietà con una versione di formato 1, questo conteggio può essere pari a quello consentito dalle dimensioni totali del set di proprietà.
- Il dizionario è facoltativo. Non tutti i nomi delle proprietà nel set devono essere visualizzati nel dizionario. Al contrario, non tutti i nomi nel dizionario sono necessari per corrispondere alle proprietà nel set. Il dizionario deve omettere le voci per le proprietà presupponete essere riconosciuto universalmente dalle applicazioni che modificano il set di proprietà. In genere, i nomi per i set di proprietà di base per gli standard ampiamente accettati vengono omessi, ma i set di proprietà speciali possono includere dizionari per l'uso da parte dei browser.
- I nomi delle proprietà nel dizionario vengono archiviati nella tabella codici indicata dall'ID proprietà 1. Per le pagine codici ANSI, ogni voce del dizionario è allineata a byte. Pertanto, non esiste alcuna spaziatura tra i nomi delle proprietà con ID proprietà 0. Si tratta dell'unico caso in cui i valori dei tipi di dati DWORD (id proprietà e nome proprietà DWORDs) non devono essere allineati ai limiti a 32 bit. Per le pagine Unicode, ogni voce del dizionario è allineata a 32 bit.
- I nomi delle proprietà che iniziano con i caratteri Unicode binari 0x0001 tramite 0x001F sono riservati per l'uso futuro.
- Il nome della proprietà associato all'ID proprietà 0 rappresenta il nome dell'intero set di proprietà.