속성 집합 저장

애플리케이션은 문서의 일부 상태 데이터를 노출하여 다른 애플리케이션이 해당 데이터를 찾아 읽을 수 있도록 할 수 있습니다. 몇 가지 예로는 워드 프로세서로 만든 문서의 작성자, 제목 및 키워드 또는 문서에 사용되는 글꼴 목록을 설명하는 속성 집합이 있습니다. 이 시설은 문서로 제한되지 않습니다. 포함된 개체에서도 사용할 수 있습니다. 일반적으로 속성 집합에 대한 액세스는 IPropertySetStorageIPropertyStorage 인터페이스를 통해야 하지만 이 섹션에서는 이전에 권장하는 방법을 설명합니다.

참고

애플리케이션 내부에 있는 속성 집합을 저장하는 경우 다음 지침을 사용하지 않을 수 있습니다. 속성 집합을 다른 애플리케이션에 노출하려면 다음 지침을 따릅니다.

 

복합 파일에 속성 집합을 저장하려면

  1. 데이터 스트림과 동일한 수준의 스토리지 구조에서 IStorage 또는 IStream instance 만듭니다. "\005"를 사용하여 IStorage 또는 IStream instance 이름을 따릅니다. 0x05 시작하는 스트림 및 스토리지 이름은 애플리케이션 간에 공유할 수 있는 공통 속성 집합에 예약되어 있습니다. 또한 해당 값으로 시작하는 스트림은 256KB로 제한됩니다. 이름은 게시된 이름 및 형식에서 선택하거나 속성 집합에 FMTID를 할당하고 Storage 개체 명명 규칙에 설명된 규칙에 따라 FMTID에서 이름을 파생하여 선택할 수 있습니다.
  2. 속성 집합은 단일 IStream instance 또는 여러 스트림 및 스토리지를 포함하는 IStorage instance 저장할 수 있습니다. IStorage instance 경우 Contents라는 포함된 스트림은 속성 값을 포함하는 기본 스트림입니다. 여기서 일부 값은 이 속성 집합에 대한 스토리지 내의 다른 스트림 또는 스토리지 인스턴스의 이름일 수 있습니다.
  3. 속성 값에 프로그래밍 방식으로 액세스하거나 표시할 수 있는 개체 클래스의 CLSID를 지정합니다. 이러한 클래스가 없으면 CLSID를 속성 집합의 형식 식별자로 설정해야 합니다. IStorage instance 사용하는 속성 집합의 경우 IStorage instance CLSID를 Contents 스트림에 저장된 것과 같거나 CLSID_NULL 설정하거나 새로 만든 IStorage의 값을 instance.
  4. 사전의 내용을 구성하는 표시 가능한 이름을 지정하는 옵션이 있습니다.

일부 애플리케이션은 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 클래스 식별자를 사용하여 식별된 애플리케이션만 속성 집합에 있는 데이터의 의미를 이해할 수 있습니다.