속성 집합 저장
애플리케이션은 문서의 일부 상태 데이터를 노출하여 다른 애플리케이션에서 해당 데이터를 찾아 읽을 수 있도록 할 수 있습니다. 몇 가지 예로는 워드 프로세서로 만든 문서의 작성자, 제목 및 키워드 또는 문서에서 사용되는 글꼴 목록을 설명하는 속성 집합이 있습니다. 이 시설은 문서로 제한되지 않습니다. 포함된 개체에서도 사용할 수 있습니다. 일반적으로 속성 집합에 대한 액세스는 IPropertySetStorage 및 IPropertyStorage 인터페이스를 통해야 하지만 이 섹션에서는 이전에 권장한 방법을 설명합니다.
메모
애플리케이션 내부 속성 집합을 저장하는 경우 다음 지침을 사용하지 않을 수 있습니다. 속성 집합을 다른 애플리케이션에 노출하려면 다음 지침을 따르세요.
복합 파일에서 속성 집합을 저장하려면
- IStorage 인스턴스 또는 IStream 인스턴스를 데이터 스트림과 동일한 수준의 스토리지 구조에서 생성하십시오. IStorage 또는 IStream 인스턴스 이름 뒤에 "\005"를 추가하십시오. 0x05로 시작하는 스트림 및 스토리지 이름은 애플리케이션 간에 공유할 수 있는 공통 속성 집합에 대해 예약됩니다. 또한 해당 값으로 시작하는 스트림은 256KB로 제한됩니다. 게시된 이름 및 형식에서 이름을 선택하거나 속성 집합에 FMTID를 할당하고 Storage 개체 명명 규칙설명된 규칙에 따라 FMTID에서 이름을 파생하여 선택할 수 있습니다.
- 속성 집합은 단일 IStream 인스턴스 또는 여러 스트림 및 스토리지를 포함하는 IStorage 인스턴스에 저장될 수 있습니다. IStorage 인스턴스의 경우 Contents라는 포함된 스트림은 속성 값을 포함하는 기본 스트림입니다. 여기서 일부 값은 이 속성 집합에 대한 스토리지 내의 다른 스트림 또는 스토리지 인스턴스의 이름이 될 수 있습니다.
- 속성 값에 대한 프로그래밍 방식 액세스를 표시하거나 제공할 수 있는 개체 클래스의 CLSID를 지정합니다. 이러한 클래스가 없으면 CLSID를 속성 집합의 형식 식별자로 설정해야 합니다. IStorage 인스턴스를 사용하는 속성 집합의 경우 IStorage 인스턴스의 CLSID를 Contents 스트림에 저장된 것과 같게 설정하거나 CLSID_NULL; 새로 만든 IStorage 인스턴스의 값입니다.
- 사전의 내용을 구성하는 표시 가능한 이름을 지정하는 옵션이 있습니다.
일부 애플리케이션은 IStream 인스턴스로 저장된 속성 집합의 구현만 읽을 수 있습니다. 속성 집합 정의가 달리 나타내지 않는 한 속성 집합이 IStorage 또는 IStream 인스턴스에 저장될 수 있음을 예상하도록 애플리케이션을 작성해야 합니다. 예를 들어 Summary Information 속성 집합 정의는 명명된 IStream 인스턴스에만 저장할 수 있다고 명시하고 있습니다. 속성 집합을 검색하고 스토리지인지 스트림인지 모르는 경우 먼저 속성 집합 이름을 가진 IStream 인스턴스를 찾습니다. 실패하면 IStorage 인스턴스를 찾습니다.
IStorage 구현에 속성 집합을 저장하는 방법을 더 잘 이해하려면 동물에 대한 정보를 편집하는 애플리케이션 클래스가 있다고 가정합니다. 먼저 이 애플리케이션 집합에 대해 CLSID(CLSID_AnimalApp)가 정의되므로 동물 정보(FMTID_AnimalInfo) 및 의료 정보(FMTID_MedicalInfo)가 포함된 속성 집합을 이해함을 나타낼 수 있습니다.
IStorage (File): "C:\OLE\REVO.DOC"
IStorage: "\005AnimalInfo", CLSID = CLSID_AnimalApp
IStream: "Contents"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = FMTID_AnimalInfo
Property: Type = PID_ANIMALTYPE, Type = VT_LPWSTR,
Value = L"Dog"
Property: Type = PID_ANIMALNAME, Type = VT_LPWSTR,
Value = L"Revo"
Property: Type = PID_MEDICALHISTORY, Type = VT_STREAMED_OBJECT,
Value = "MedicalInfo"
...
IStream: "MedicalInfo"
WORD wByteOrder, WORD wFmtVersion, DWORD dwOSVer,
CLSID CLSID_AnimalApp, DWORD cSections...
...
FMTID = CLSID_MedicalInfo
Property: Type = PID_VETNAME, Type = VT_LPWSTR,
Value = L"Dr. Woof"
Property: Type = PID_LASTEXAM, Type = VT_DATE, Value = ...
주의하세요, IStorage 인터페이스와 두 속성 집합의 CLSID는 CLSID_AnimalApp입니다. 이러한 속성 집합에 대한 프로그래밍 방식 액세스를 표시 및/또는 제공할 수 있는 모든 애플리케이션을 식별합니다. 모든 애플리케이션은 속성 집합 내에서 데이터를 읽을 수 있지만(속성 집합 뒤의 지점) CLSID_AnimalApp 클래스 식별자를 사용하여 식별된 애플리케이션만 속성 집합에 있는 데이터의 의미를 이해할 수 있습니다.