Condividi tramite


Tabelle codici e stringhe Unicode

Un'altra considerazione nell'implementazione di IPropertySetStorage è il modo in cui i nomi delle proprietà Unicode vengono archiviati nell'ID proprietà 0 (dizionario dei nomi di proprietà), che non usa stringhe Unicode.

Unicode ha ufficialmente un valore di tabella codici pari a 1200. Per archiviare i valori Unicode nel dizionario dei nomi di proprietà, usare un valore della tabella codici pari a 1200 per l'intero set di proprietà (in ID proprietà 1), specificato dall'assenza del flag PROPSETFLAG_ANSI in IPropertySetStorage::Create. Tenere presente che questo ha l'effetto collaterale di archiviare tutti i valori stringa nella proprietà impostata in Unicode. In tutte le tabelle codici, il conteggio trovato all'inizio di un VT_LPSTR è un conteggio di byte, non un conteggio dei caratteri. Ciò è necessario per garantire la compatibilità con i client con versioni precedenti.

L'implementazione di file composta di IPropertySetStorage crea tutti i nuovi set di proprietà completamente in Unicode (tabella codici 1200) o nella tabella codici ANSI di sistema corrente. Questo controllo è controllato dall'assenza o dalla presenza del flag PROPSETFLAG_ANSI nel parametro grfFlags diIPropertySetStorage::Create.

Creare e aprire set di proprietà come Unicode. Per implementare questa operazione, non impostare il flag di PROPSETFLAG_ANSI nel parametro grfFlags di IPropertySetStorage::Create. Evitare di usare valori VT_LPSTR e usare invece valori VT_LPWSTR. Quando la tabella codici del set di proprietà è Unicode, VT_LPSTR valori stringa vengono convertiti in Unicode quando vengono archiviati e nuovamente in valori stringa multibyte quando vengono recuperati.

L'impostazione del flag PROPSETFLAG_ANSI come segnalato tramite una chiamata a IPropertyStorage::Stat riflette se la tabella codici sottostante è o meno Unicode. Tenere presente che l'ID proprietà 1 può essere letto in modo esplicito per apprendere la tabella codici.

È possibile accedere all'ID proprietà 1 tramite una chiamata a IPropertyStorage::ReadMultiple. Tuttavia, è di sola lettura e potrebbe non essere aggiornato con WriteMultiple. Inoltre, potrebbe non essere eliminato con DeleteMultiple.