コード ページと Unicode 文字列
IPropertySetStorage を実装する際のもう 1 つの考慮事項は、Unicode 文字列を使用しないプロパティ ID 0 (プロパティ名ディクショナリ) に Unicode プロパティ名を格納する方法です。
Unicode のコード ページ値は正式には 1200 です。 Unicode 値をプロパティ名ディクショナリに格納するには、IPropertySetStorage::Create に PROPSETFLAG_ANSI フラグがない場合に指定された、プロパティ セット全体 (プロパティ ID 1) に 1200 のコード ページ値を使用します。 これは、Unicode で設定されたプロパティにすべての文字列値を格納する副作用があることに注意してください。 すべてのコード ページで、 VT_LPSTR の先頭にあるカウントはバイト数であり、文字数ではありません。 これは、以前のバージョンのクライアントとの互換性を提供するために必要です。
IPropertySetStorage の複合ファイル実装では、Unicode (コード ページ 1200) または現在のシステム ANSI コード ページで、すべての新しいプロパティ セットが完全に作成されます。 これは、IPropertySetStorage::Create の grfFlags パラメーターにPROPSETFLAG_ANSI フラグが存在しないことによって制御されます。
プロパティ セットを Unicode として作成して開きます。 これを実装するには、IPropertySetStorage::Create の grfFlags パラメーターに PROPSETFLAG_ANSI フラグを設定しないでください。 VT_LPSTR値は使用しないでください。代わりに、VT_LPWSTR値を使用してください。 プロパティ セットのコード ページが Unicode の場合、 VT_LPSTR 文字列値は格納時に Unicode に変換され、取得されるとマルチバイト文字列値に戻されます。
IPropertyStorage::Stat の呼び出しによって報告されるPROPSETFLAG_ANSI フラグを設定すると、基になるコード ページが Unicode であるかどうかを反映します。 コード ページを学習するために、プロパティ ID 1 を明示的に読み取ることができることに注意してください。
プロパティ ID 1 にアクセスするには、 IPropertyStorage::ReadMultiple を呼び出します。 ただし、読み取り専用であり、 WriteMultiple で更新することはできません。 さらに、 DeleteMultiple では削除できない場合があります。