Freigeben über


Eigenschaftensatz-Anzeigenamenwörterbuch

Ein Wörterbuch mit Eigenschaftenanzeigenamen ermöglicht es Benutzern von Eigenschaftensatz, Eigenschaften bedeutungen zuzuordnen , die über die vom Typindikator bereitgestellten hinausgehen.

Wörterbuchstruktur

Das Wörterbuch enthält eine Anzahl von Einträgen in der Liste, gefolgt von einer Liste von Wörterbucheinträgen.

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

Verzeichniseintragsstruktur

Jeder Wörterbucheintrag in der Liste ist ein Eigenschaftsbezeichner/Zeichenfolgenpaar. Es folgt eine Pseudostrukturdefinition für einen Wörterbucheintrag. Es handelt sich um eine Pseudostruktur, da das sz[]-Element eine variable Größe aufweist.

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

Beispielwörterbuch

Das folgende Beispiel für die Übertragung von Börsendaten kann einen anzeigebaren Namen "Aktienkurs" für den gesamten Satz und "Tickersymbol" für PID_SYMBOL enthalten. Wenn ein Eigenschaftssatz nur ein Symbol und das Wörterbuch enthält, würde der Abschnitt des Eigenschaftensatzes einen Bytestrom aufweisen, der wie folgt aussieht.

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.

Beachten Sie die folgenden Probleme in Bezug auf Eigenschaftssatzwörterbücher:

  • Eigenschafts-ID 0 verfügt nicht über einen Typindikator. Der DWORD-Datentyp , der die Anzahl der Einträge angibt, befindet sich in der Typindikatorposition.
  • Die Anzahl der Zeichen in der cch-Zeichenfolge enthält das Nullzeichen, das die Zeichenfolge beendet. Wenn die Codepage des Eigenschaftssatzes nicht Unicode ist, handelt es sich bei diesem Feld tatsächlich um eine Byteanzahl . Bei Eigenschaftensätzen mit der Formatversion 0 darf diese Anzahl 256 nicht überschreiten. Bei Eigenschaftensätzen mit einer Formatversion von 1 kann diese Anzahl so groß sein, wie die Gesamtgröße des Eigenschaftssatzes zulässig ist.
  • Das Wörterbuch ist optional. Nicht alle Namen von Eigenschaften in der Gruppe müssen im Wörterbuch angezeigt werden. Umgekehrt sind nicht alle Namen im Wörterbuch erforderlich, um Eigenschaften im Satz zu entsprechen. Das Wörterbuch sollte Einträge für Eigenschaften weglassen, von der angenommen wird, dass sie universell von Anwendungen erkannt werden, die den Eigenschaftensatz bearbeiten. In der Regel werden Namen für die Basiseigenschaftssätze für allgemein akzeptierte Standards weggelassen, aber spezielle Eigenschaftssätze können Wörterbücher für die Verwendung durch Browser enthalten.
  • Eigenschaftennamen im Wörterbuch werden auf der Codepage gespeichert, die durch Eigenschafts-ID 1 angegeben wird. Bei ANSI-Codeseiten ist jeder Wörterbucheintrag bytebündig. Daher gibt es keinen Abstand zwischen Eigenschaftsnamen mit Eigenschafts-ID 0. Dies ist der einzige Fall, in dem Werte von DWORD-Datentypen (die Eigenschafts-ID und DWORD-Längeder Eigenschaft) nicht an 32-Bit-Grenzen ausgerichtet werden müssen. Bei Unicode-Seiten ist jeder Wörterbucheintrag 32-Bit ausgerichtet.
  • Eigenschaftennamen, die mit den binären Unicode-Zeichen beginnen, die bis 0x001F 0x0001, sind für die zukünftige Verwendung reserviert.
  • Der Eigenschaftenname, der der Eigenschafts-ID 0 zugeordnet ist, stellt den Namen des gesamten Eigenschaftensatzes dar.