次の方法で共有


プロパティ セットの表示名辞書

プロパティ表示名のディクショナリを使用すると、プロパティ セットのユーザーは、型インジケーターによって提供される値を超えて、プロパティに意味を付けることができます。

辞書の構造

ディクショナリには、リスト内のエントリの数と、その後に辞書エントリのリストが含まれます。

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 に関連付けられているプロパティ名は、プロパティ セット全体の名前を表します。