プロパティ セットの表示名辞書
プロパティ表示名のディクショナリを使用すると、プロパティ セットのユーザーは、型インジケーターによって提供される値を超えて、プロパティに意味を付けることができます。
辞書の構造
ディクショナリには、リスト内のエントリの数と、その後に辞書エントリのリストが含まれます。
typedef struct tagDICTIONARY
{
DWORD cEntries ; // Count of entries in the list
ENTRY rgEntry[ cEntries ] ; // Property ID/String pair
} DICTIONARY ;
ディクショナリ エントリの構造
リスト内の各ディクショナリ エントリは、プロパティ識別子と文字列のペアです。 ディクショナリ エントリの擬似構造定義を次に示します。 sz[] メンバーはサイズが可変であるため、擬似構造です。
typedef struct tagENTRY
{
DWORD propid ; // Property ID
DWORD cch ; // Count of characters in the string
char sz[cch]; // Zero-terminated string
} ENTRY ;
サンプル 辞書
次の株価データ転送の例には、セット全体の表示可能な名前 "株価" と、PID_SYMBOLの "ティッカー シンボル" が含まれる場合があります。 プロパティ セットにシンボルとディクショナリだけが含まれている場合、プロパティ セット セクションのバイト ストリームは次のようになります。
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.
プロパティ セットディクショナリに関する次の問題に注意してください。
- プロパティ ID 0 には型インジケーターがありません。 エントリの数を示す DWORD データ型は、型インジケーター位置にあります。
- cch 文字列内の文字数には、文字列を終了する 0 文字が含まれます。 プロパティ セットのコード ページが Unicode でない場合、このフィールドは実際には バイト 数です。 形式バージョンが 0 のプロパティ セットの場合、この数は 256 を超えることはできません。 形式バージョンが 1 のプロパティ セットの場合、この数は、プロパティ セットの合計サイズで許可されているのと同じ大きさになる場合があります。
- ディクショナリは省略可能です。 セット内のすべてのプロパティ名がディクショナリに表示される必要はありません。 逆に、ディクショナリ内のすべての名前がセット内のプロパティに対応する必要があるわけではありません。 ディクショナリでは、プロパティ セットを操作するアプリケーションによって汎用的に認識されると見なされるプロパティのエントリを省略する必要があります。 通常、広く受け入れられている標準の基本プロパティ セットの名前は省略されますが、特殊な目的のプロパティ セットにはブラウザーで使用する辞書を含めることができます。
- ディクショナリ内のプロパティ名は、 プロパティ ID 1 で示されるコード ページに格納されます。 ANSI コード ページの場合、各ディクショナリ エントリはバイトアラインされます。 したがって、プロパティ ID が 0 のプロパティ名の間にスペースはありません。 これは、 DWORD データ型 (プロパティ ID とプロパティ名の長さ DWORD) の値を 32 ビット境界に配置する必要がない唯一のケースです。 Unicode ページの場合、各ディクショナリ エントリは 32 ビットアラインされます。
- 0x001Fで0x0001バイナリ Unicode 文字で始まるプロパティ名は、今後使用するために予約されています。
- プロパティ ID 0 に関連付けられているプロパティ名は、プロパティ セット全体の名前を表します。