Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Innym zagadnieniem podczas implementowania IPropertySetStorage jest sposób przechowywania nazw właściwości Unicode w identyfikatorze właściwości 0 (słowniku nazw właściwości), który nie używa ciągów Unicode.
Unicode oficjalnie ma wartość strony kodowej 1200. Aby przechowywać wartości Unicode w słowniku nazw właściwości, użyj wartości strony kodowej 1200 dla całego zestawu właściwości (w identyfikatorze właściwości 1), określonego przez brak flagi PROPSETFLAG_ANSI w IPropertySetStorage::Create. Należy pamiętać, że ma to efekt uboczny przechowywania wszystkich wartości ciągów we właściwości ustawionej w formacie Unicode. Na wszystkich stronach kodu liczba znaleziona na początku VT_LPSTR jest liczbą bajtów, a nie liczbą znaków. Jest to konieczne, aby zapewnić zgodność ze starszymi wersjami klientów.
Implementacja pliku złożonego IPropertySetStorage tworzy wszystkie nowe zestawy właściwości całkowicie w formacie Unicode (strona kodowa 1200) lub na bieżącej stronie kodowej ANSI systemu. Jest to kontrolowane przez brak lub obecność flagi PROPSETFLAG_ANSI w grfFlags parametru IPropertySetStorage::Create.
Utwórz i otwórz zestawy właściwości jako Unicode. Aby to zaimplementować, nie należy ustawiać flagi PROPSETFLAG_ANSI w grfFlags parametru IPropertySetStorage::Create. Unikaj używania wartości VT_LPSTR, a zamiast tego użyj wartości VT_LPWSTR. Gdy strona kodowa zestawu właściwości to Unicode, VT_LPSTR wartości ciągów są konwertowane na Unicode podczas przechowywania i z powrotem do wielobajtowych wartości ciągów podczas pobierania.
Ustawienie flagi PROPSETFLAG_ANSI zgłoszonej za pomocą wywołania IPropertyStorage::Stat odzwierciedla, czy podstawowa strona kodowa jest lub nie jest Unicode. Należy pamiętać, że identyfikator właściwości 1 można jawnie odczytać, aby poznać stronę kodów.
Dostęp do właściwości o identyfikatorze 1 można uzyskać za pośrednictwem wywołania metody IPropertyStorage::ReadMultiple. Jednak jest on tylko do odczytu i może nie zostać zaktualizowany przy użyciu WriteMultiple. Ponadto nie można go usunąć za pomocą DeleteMultiple.