次の方法で共有


コード ページと Unicode 文字列

IPropertySetStorage を実装する際のもう 1 つの考慮事項は、Unicode 文字列を使用しないプロパティ ID 0 (プロパティ名ディクショナリ) に Unicode プロパティ名を格納する方法です。

Unicode のコード ページ値は正式には 1200 です。 Unicode 値をプロパティ名ディクショナリに格納するには、IPropertySetStorage::CreatePROPSETFLAG_ANSI フラグがない場合に指定されたプロパティ セット全体 (プロパティ ID 1) に対して 1200 のコード ページ値を使用します。 これは、Unicode で設定されたプロパティにすべての文字列値を格納する副作用があることに注意してください。 すべてのコード ページで、VT_LPSTR の開始時に見つかったカウントはバイト数であり、文字数ではありません。 これは、以前のバージョンのクライアントとの互換性を提供するために必要です。

IPropertySetStorage の複合ファイル実装では、Unicode (コード ページ 1200) または現在のシステム ANSI コード ページで、すべての新しいプロパティ セットが完全に作成されます。 これは、IPropertySetStorage::CreategrfFlags パラメーターに PROPSETFLAG_ANSI フラグ存在しないことによって制御されます。

Unicode としてプロパティ セットを作成して開きます。 これを実装するには、IPropertySetStorage::CreategrfFlags パラメーターに PROPSETFLAG_ANSI フラグ設定しないでください。 VT_LPSTR 値は使用しないでください。代わりに VT_LPWSTR 値を使用してください。 プロパティ セットのコード ページが Unicode の場合、VT_LPSTR 文字列値は格納時に Unicode に変換され、取得されるとマルチバイト文字列値に戻されます。

IPropertyStorage::Stat の呼び出しによって報告される PROPSETFLAG_ANSI フラグを設定すると、基になるコード ページが Unicode であるかどうかを反映します。 プロパティ ID 1 は、コード ページを学習するために明示的に読み取ることができることに注意してください。

プロパティ ID 1 には、IPropertyStorage::ReadMultipleの呼び出しを通じてアクセスできます。 ただし、読み取り専用であり、WriteMultipleで更新場合があります。 さらに、DeleteMultipleでは削除できません