속성 집합 저장
애플리케이션은 문서의 일부 상태 데이터를 노출하여 다른 애플리케이션이 해당 데이터를 찾아 읽을 수 있도록 할 수 있습니다. 몇 가지 예로는 워드 프로세서로 만든 문서의 작성자, 제목 및 키워드 또는 문서에 사용되는 글꼴 목록을 설명하는 속성 집합이 있습니다. 이 시설은 문서로 제한되지 않습니다. 포함된 개체에서도 사용할 수 있습니다. 일반적으로 속성 집합에 대한 액세스는 IPropertySetStorage 및 IPropertyStorage 인터페이스를 통해야 하지만 이 섹션에서는 이전에 권장하는 방법을 설명합니다.
참고
애플리케이션 내부에 있는 속성 집합을 저장하는 경우 다음 지침을 사용하지 않을 수 있습니다. 속성 집합을 다른 애플리케이션에 노출하려면 다음 지침을 따릅니다.
복합 파일에 속성 집합을 저장하려면
- 데이터 스트림과 동일한 수준의 스토리지 구조에서 IStorage 또는 IStream instance 만듭니다. "\005"를 사용하여 IStorage 또는 IStream instance 이름을 따릅니다. 0x05 시작하는 스트림 및 스토리지 이름은 애플리케이션 간에 공유할 수 있는 공통 속성 집합에 예약되어 있습니다. 또한 해당 값으로 시작하는 스트림은 256KB로 제한됩니다. 이름은 게시된 이름 및 형식에서 선택하거나 속성 집합에 FMTID를 할당하고 Storage 개체 명명 규칙에 설명된 규칙에 따라 FMTID에서 이름을 파생하여 선택할 수 있습니다.
- 속성 집합은 단일 IStream instance 또는 여러 스트림 및 스토리지를 포함하는 IStorage instance 저장할 수 있습니다. IStorage instance 경우 Contents라는 포함된 스트림은 속성 값을 포함하는 기본 스트림입니다. 여기서 일부 값은 이 속성 집합에 대한 스토리지 내의 다른 스트림 또는 스토리지 인스턴스의 이름일 수 있습니다.
- 속성 값에 프로그래밍 방식으로 액세스하거나 표시할 수 있는 개체 클래스의 CLSID를 지정합니다. 이러한 클래스가 없으면 CLSID를 속성 집합의 형식 식별자로 설정해야 합니다. IStorage instance 사용하는 속성 집합의 경우 IStorage instance CLSID를 Contents 스트림에 저장된 것과 같거나 CLSID_NULL 설정하거나 새로 만든 IStorage의 값을 instance.
- 사전의 내용을 구성하는 표시 가능한 이름을 지정하는 옵션이 있습니다.
일부 애플리케이션은 IStream 인스턴스로 저장된 속성 집합의 구현만 읽을 수 있습니다. 속성 집합 정의가 달리 나타내지 않는 한 속성 집합이 IStorage 또는 IStream instance 저장될 수 있음을 예상하도록 애플리케이션을 작성해야 합니다. 예를 들어 요약 정보 속성 집합 정의는 명명된 IStream instance만 저장할 수 있다고 명시합니다. 속성 집합을 검색하고 스토리지인지 스트림인지 모르는 경우 먼저 속성 집합 이름을 사용하여 IStream instance 찾습니다. 실패하면 IStorage instance 찾습니다.
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 클래스 식별자를 사용하여 식별된 애플리케이션만 속성 집합에 있는 데이터의 의미를 이해할 수 있습니다.