Codepages und Unicode-Zeichenfolgen

Ein weiterer Aspekt bei der Implementierung von IPropertySetStorage ist die Speicherung von Unicode-Eigenschaftsnamen in der Eigenschafts-ID 0 (dem Eigenschaftennamenwörterbuch), die keine Unicode-Zeichenfolgen verwendet.

Unicode hat offiziell den Codepagewert 1200. Um Unicode-Werte im Eigenschaftennamenwörterbuch zu speichern, verwenden Sie den Codepagewert 1200 für den gesamten Eigenschaftensatz (in Eigenschafts-ID 1), der durch das Fehlen des PROPSETFLAG _ ANSI-Flags in IPropertySetStorage::Createangegeben wird. Beachten Sie, dass dies den Nebeneffekt hat, dass alle Zeichenfolgenwerte in der in Unicode festgelegten Eigenschaft gespeichert werden. In allen Codepages ist die Anzahl, die am Anfang eines VT _ LPSTR gefunden wurde, eine Byteanzahl, keine Zeichenanzahl. Dies ist erforderlich, um Kompatibilität mit Clients früherer Versionen zu gewährleisten.

Die Verbunddateiimplementierung von IPropertySetStorage erstellt alle neuen Eigenschaftensätze vollständig entweder in Unicode (Codepage 1200) oder auf der aktuellen SYSTEM-ANSI-Codepage. Dies wird durch das Fehlen oder Vorhandensein des PROPSETFLAG _ ANSI-Flags im grfFlags-Parameter von IPropertySetStorage::Creategesteuert.

Erstellen und öffnen Sie Eigenschaftensätze als Unicode. Um dies zu implementieren, legen Sie das PROPSETFLAG _ ANSI-Flag nicht im grfFlags-Parameter von IPropertySetStorage::Create fest. Vermeiden Sie die Verwendung von VT _ LPSTR-Werten, und verwenden Sie stattdessen VT _ LPWSTR-Werte. Wenn die Codepage des Eigenschaftensatzes Unicode ist, werden VT _ LPSTR-Zeichenfolgenwerte bei der Speicherung in Unicode und beim Abrufen wieder in Multibyte-Zeichenfolgenwerte konvertiert.

Das Festlegen des PROPSETFLAG-ANSI-Flags, _ das durch einen Aufruf von IPropertyStorage::Stat gemeldet wird, gibt an, ob die zugrunde liegende Codepage Unicode ist oder nicht. Beachten Sie, dass Eigenschafts-ID 1 explizit gelesen werden kann, um die Codepage zu erlernen.

Sie können über einen Aufruf von IPropertyStorage::ReadMultipleauf Die Eigenschafts-ID 1 zugreifen. Sie ist jedoch schreibgeschützt und kann nicht mit WriteMultipleaktualisiert werden. Darüber hinaus kann es nicht mit DeleteMultiplegelöscht werden.