予約済みプロパティ識別子
予約済みプロパティ識別子は、プロパティ識別子 (ID) として使用できません。 プロパティ識別子 (ID) は、0、1、および 0x80000000 以上の値を除いて使用できます。 これらのプロパティ識別子の値は、アプリケーションで使用するために予約されています。
次の表に、予約済みプロパティ ID と、プロパティ ID の予約対象の説明を示します。
予約済みプロパティ ID | 形容 |
---|---|
0 | 省略可能な プロパティ セット表示名ディクショナリを作成するために予約されています。 これにより、プロパティ セットのユーザーは、型インジケーターによって提供される意味を超えて、プロパティに意味を添付できます。 |
1 | プロパティ セット内の文字列を解釈するときに使用するコード ページ (Windows) またはスクリプト (Macintosh) のインジケーターとして予約されています。 プロパティ セット内のすべての文字列値は、同じコード ページで格納する必要があります。 プロパティ セット ヘッダー (PROPERTYSETHEADER::d wOSVer) の元のオペレーティング システム値は、コード ページ インジケーターが Windows コード ページまたは Macintosh スクリプトに対応するかどうかを決定します。 |
0x80000000 | プロパティ セットが書き込まれるロケールを示す値として予約されています。 プロパティ セットの既定のロケールは、システムの既定のロケール (LOCALE_SYSTEM_DEFAULT) です。 LOCALE_SYSTEM_DEFAULTの詳細については、Win32 API を参照してください。 既定値は、ロケール インジケーターがプロパティ セットに存在しない場合に使用されます。 |
0x80000003 | プロパティ セットの動作のインジケーターとして予約されています。 このプロパティ ID 値はVT_UI4であり、値VT_UI4を含む DWORD データ型で始まり、その後にプロパティ セットの動作を示す DWORD が続きます。 現時点では、この値で定義されている唯一のビットは下位ビット (0x1) です。 このビットが設定されている場合は、プロパティ ID 0 で示されるプロパティ セット名を大文字と小文字を区別する必要があることを示します。 このビットが設定されていない場合、または動作プロパティ (ID 0x80000003) が存在しない場合、名前は大文字と小文字を区別しないと見なす必要があります。 |
0xFFFFFFFF | プログラミングの利便性のために予約されています。 シリアル化されたプロパティ セットには表示しないでください。 |
上位ビットセット (つまり負の値) を持つプロパティ識別子は、Microsoft が将来使用するために予約されています。
予約済みプロパティのうち、0xBFFFFFFFに0x80000000範囲の ID 値を持つプロパティは、その意味を理解していない実装によって読み取り専用と見なされます。 たとえば、実装がプロパティ 0x80000000の意味を理解していない場合は、そのプロパティを読み取るが書き込んだり削除したりできないようにする必要があります。 このような実装では、0xC0000000範囲内のプロパティを読み取り、書き込み、または削除0xFFFFFFFEできるようにする必要があります。 プロパティ ID 0xFFFFFFFFは予約値であり、シリアル化されたプロパティ セットには表示されません。
プロパティ セットのロケール
アプリケーションでは、ロケールをサポートするか、既定の動作を使用するかを選択できます。 アプリケーションでは、ユーザーが作業ロケールを指定できるようにすることをお勧めします。 このようなアプリケーションでは、ユーザー指定のロケール識別子をプロパティに書き込む必要があります。 ユーザーの既定のロケール (LOCALE_USER_DEFAULT) を使用するアプリケーションでは、ユーザーの既定のロケール識別子をプロパティに書き込む必要があります。 LOCALE_USER_DEFAULTの詳細については、Win32 API を参照してください。
手記
IPropertySetStorage インターフェイスを使用してプロパティ セットを作成すると、ユーザーの既定のロケールがロケール インジケーターとして自動的に書き込まれます。
アプリケーションでは、外部オブジェクトの場合も処理する必要があります。これは、ロケールがアプリケーション ロケール、ユーザー ロケール、またはシステム ロケールではない場合です。
ロケール インジケーター プロパティはVT_U14型であるため、Win32 API で定義されているロケール識別子 (LCID) を含む DWORD の後に、VT_U14を含む DWORD で構成されます。
コード ページ インジケーター
プロパティ セットの作成者ではないアプリケーションが、セット内の文字列型のプロパティを変更する場合は、コード ページ インジケーターを調べて、次のいずれかのアクションを実行する必要があります。
- コード ページ インジケーターで指定された形式で文字列を書き込みます。
- コード ページを変更するには、置き換えて書き換えます。
アプリケーションがこのインジケーターを認識できない場合は、プロパティを変更しないでください。 プロパティ セットのすべての作成者は、コード ページ インジケーターを記述する必要があります。ただし、コード ページ インジケーターが存在しない場合は、リーダーのコンピューター上の一般的なコード ページを想定する必要があります。
手記
IPropertySetStorage インターフェイスを使用してプロパティ セットを作成すると、コード ページ インジケーターが自動的に書き込まれます。
コード ページに使用できる値は、Win32 API (詳細については、GetACP 関数を参照) と Inside Macintosh Volume VI(ページ 14- 111) で指定します。 (これらのリソースは、一部の言語や国では使用できない場合があります)。たとえば、コード ページ US ANSI は 0x04E4 (10 進数では 1252) で表され、Unicode のコード ページは0x04B0 (10 進数では 1200) です。
可能な場合は Unicode コード ページを使用し、VT_LPSTRではなく VT_LPWSTR を使用して、マルチバイトの <を回避することをお勧めします。ストレージと取得中に Unicode 変換を> します。 すべてのプロパティ セットに同じコード ページを使用することは、世界中で相互運用可能なプロパティ セットを実現する唯一の方法です。 Unicode または Unicode 以外のコード ページでは、VT_LPSTRまたはVT_BSTRの開始時のカウントは バイト カウントであり、文字 カウントではないことに注意してください。 このバイト数には、文字列の末尾に 1 つまたは 2 つのゼロ バイトが含まれます (文字列の NULL ターミネータ)。
プロパティ ID 1 はVT_I2型であり、コード ページを示す SHORT が続く値VT_I2を含む DWORD で始まります。