Partager via


Pages de code et chaînes Unicode

Une autre considération à prendre en compte lors de l’implémentation d’IPropertySetStorage est la façon dont les noms de propriétés Unicode sont stockés dans l’ID de propriété 0 (dictionnaire de noms de propriété), qui n’utilise pas de chaînes Unicode.

Unicode a officiellement une valeur de page de code de 1200. Pour stocker des valeurs Unicode dans le dictionnaire de noms de propriétés, utilisez une valeur de page de code de 1200 pour l’ensemble de la propriété définie (dans l’ID de propriété 1), spécifiée par l’absence de l’indicateur PROPSETFLAG_ANSI dans IPropertySetStorage::Create. N’oubliez pas que cela a pour effet secondaire de stocker toutes les valeurs de chaîne dans la propriété définie en Unicode. Dans toutes les pages de code, le nombre trouvé au début d’une VT_LPSTR est un nombre d’octets, et non un nombre de caractères. Cela est nécessaire pour assurer la compatibilité avec les clients de version antérieure.

L’implémentation de fichiers composés d’IPropertySetStorage crée tous les nouveaux jeux de propriétés entièrement en Unicode (page de code 1200) ou dans la page de code ANSI système actuelle. Cela est contrôlé par l’absence ou la présence de l’indicateur PROPSETFLAG_ANSI dans le paramètre grfFlags de IPropertySetStorage::Create.

Créez et ouvrez des jeux de propriétés en unicode. Pour l’implémenter, ne définissez pas l’indicateur PROPSETFLAG_ANSI dans le paramètre grfFlags de IPropertySetStorage::Create. Évitez d’utiliser des valeurs VT_LPSTR et utilisez plutôt VT_LPWSTR valeurs. Lorsque la page de code du jeu de propriétés est Unicode, VT_LPSTR valeurs de chaîne sont converties en Unicode lorsqu’elles sont stockées, puis de nouveau en valeurs de chaîne multioctets lorsqu’elles sont récupérées.

La définition de l’indicateur PROPSETFLAG_ANSI comme indiqué par un appel à IPropertyStorage::Stat indique si la page de code sous-jacente est ou non Unicode. N’oubliez pas que l’ID de propriété 1 peut être lu explicitement pour apprendre la page de code.

Vous pouvez accéder à l’ID de propriété 1 via un appel à IPropertyStorage::ReadMultiple. Toutefois, il est en lecture seule et peut ne pas être mis à jour avec WriteMultiple. En outre, il ne peut pas être supprimé avec DeleteMultiple.