코드 페이지 및 유니코드 문자열

IPropertySetStorage 구현의 또 다른 고려 사항은 유니코드 문자열을 사용하지 않는 속성 ID 0(속성 이름 사전)에 유니코드 속성 이름이 저장되는 방식입니다.

유니코드는 공식적으로 코드 페이지 값이 1200입니다. 유니코드 값을 속성 이름 사전에 저장하려면 IPropertySetStorage::Create에서 PROPSETFLAG_ANSI 플래그가 없으면 지정된 전체 속성 집합(속성 ID 1)에 대해 1200의 코드 페이지 값을 사용합니다. 유니코드에 설정된 속성에 모든 문자열 값을 저장하는 부작용이 있습니다. 모든 코드 페이지에서 VT_LPSTR 시작 부분에 있는 개수는 문자 수가 아닌 바이트 수입니다. 이는 이전 버전 클라이언트와의 호환성을 제공하는 데 필요합니다.

IPropertySetStorage의 복합 파일 구현은 유니코드(코드 페이지 1200) 또는 현재 시스템 ANSI 코드 페이지에서 완전히 모든 새 속성 집합을 만듭니다. 이는 IPropertySetStorage::CreategrfFlags 매개 변수에 PROPSETFLAG_ANSI 플래그가 없거나 존재하여 제어됩니다.

속성 집합을 유니코드로 만들고 엽니다. 이를 구현하려면 IPropertySetStorage::CreategrfFlags 매개 변수에서 PROPSETFLAG_ANSI 플래그를 설정하지 마세요. VT_LPSTR 값을 사용하지 말고 대신 VT_LPWSTR 값을 사용합니다. 속성 집합의 코드 페이지가 유니코드인 경우 VT_LPSTR 문자열 값은 저장될 때 유니코드로 변환되고 검색할 때 다시 멀티바이트 문자열 값으로 변환됩니다.

IPropertyStorage::Stat 호출을 통해 보고된 대로 PROPSETFLAG_ANSI 플래그를 설정하면 기본 코드 페이지가 유니코드인지 여부를 반영합니다. 속성 ID 1을 명시적으로 읽어 코드 페이지를 학습할 수 있습니다.

IPropertyStorage::ReadMultiple 호출을 통해 속성 ID 1에 액세스할 수 있습니다. 그러나 읽기 전용이며 WriteMultiple로 업데이트되지 않을 수 있습니다. 또한 DeleteMultiple을 사용하여 삭제되지 않을 수도 있습니다.