Udostępnij przez


Przechowywanie zestawów właściwości

Aplikacje mogą uwidocznić niektóre dane stanu swoich dokumentów, aby inne aplikacje mogły lokalizować i odczytywać te dane. Niektóre przykłady to zestaw właściwości opisujący autora, tytuł i słowa kluczowe dokumentu utworzonego za pomocą edytora tekstów lub listę czcionek używanych w dokumencie. Ta funkcja nie jest ograniczona do dokumentów; można go również używać w obiektach osadzonych. Ogólnie rzecz biorąc, dostęp do zestawów właściwości powinien odbywać się poprzez interfejsy IPropertySetStorage oraz IPropertyStorage, ale w tej sekcji opisano wcześniej zalecany sposób.

Notatka

Jeśli przechowujesz zestaw właściwości, który jest wewnętrzny dla aplikacji, możesz nie chcieć użyć poniższych wskazówek. Aby udostępnić właściwości dla innych aplikacji, postępuj zgodnie z tymi wytycznymi.

 

Do przechowywania zbioru właściwości w pliku złożonym

  1. Utwórz wystąpienie IStorage lub IStream na tym samym poziomie struktury pamięci co strumienie danych. Postępuj zgodnie z nazwą wystąpienia IStorage lub IStream z parametrem "\005". Nazwy strumieni i magazynu rozpoczynające się od 0x05 są zarezerwowane dla typowych zestawów właściwości, które mogą być współużytkowane przez aplikacje. Ponadto strumienie rozpoczynające się od tej wartości są ograniczone do 256 KB. Nazwy można wybrać z opublikowanych nazw i formatów albo poprzez przypisanie zestawowi właściwości identyfikatora FMTID i wyprowadzenie nazwy na podstawie FMTID zgodnie z konwencjami opisanymi w Storage Object Naming Conventions.
  2. Zestaw właściwości może być przechowywany w jednym wystąpieniu usługi IStreamlub w wystąpieniu usługi IStorage zawierającym wiele strumieni i magazynów. W przypadku instancji IStorage strumień o nazwie Contents zawarty w niej jest podstawowym strumieniem, który zawiera wartości właściwości, gdzie niektóre wartości mogą być nazwami innych strumieni lub instancji magazynu tego zestawu właściwości.
  3. Określ identyfikator CLSID klasy obiektu, który może wyświetlać lub zapewniać dostęp programowy do wartości właściwości. Jeśli nie ma takiej klasy, identyfikator CLSID powinien być ustawiony na identyfikator formatu zestawu właściwości. W przypadku zestawu właściwości używającego wystąpienia IStorage, należy ustawić identyfikator CLSID wystąpienia IStorage na taki sam jak ten przechowywany w strumieniu zawartości lub na CLSID_NULL; czyli wartość w nowo utworzonym wystąpieniu IStorage.
  4. Istnieje możliwość określenia nazw możliwych do wyświetlenia, które tworzą zawartość słownika.

Niektóre aplikacje mogą odczytywać tylko implementacje zestawów właściwości przechowywanych jako wystąpienia IStream. Aplikacje powinny być tak napisane, aby oczekiwać, że zestaw właściwości może być przechowywany w instancji IStorage lub IStream, chyba że definicja zestawu właściwości wskazuje inaczej. Na przykład definicja zestawu właściwości Podsumowanie Informacji stwierdza, że może być przechowywana tylko w nazwanym wystąpieniu usługi IStream. W przypadkach, gdy szukasz zestawu właściwości i nie wiesz, czy jest to magazyn, czy strumień, poszukaj wystąpienia IStream z nazwą zestawu właściwości. Jeśli to się nie powiedzie, poszukaj wystąpienia IStorage.

Aby lepiej zrozumieć przechowywanie zestawów właściwości w implementacji IStorage, załóżmy, że istnieje klasa aplikacji, które edytują informacje o zwierzętach. Najpierw dla tego zestawu aplikacji zdefiniowano identyfikator CLSID (CLSID_AnimalApp), aby wskazać, że rozumieją zestawy właściwości zawierające informacje o zwierzętach (FMTID_AnimalInfo) i inne, które zawierają informacje medyczne (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 = ...

Należy pamiętać, że identyfikator CLSID interfejsu IStorage i oba zestawy właściwości są CLSID_AnimalApp. Pozwala to zidentyfikować dowolną aplikację, która może wyświetlać i/lub zapewniać programowy dostęp do tych zestawów właściwości. Każda aplikacja może odczytywać dane w zestawach właściwości (punkt za zestawami właściwości), ale tylko aplikacje identyfikowane z identyfikatorem klasy CLSID_AnimalApp mogą zrozumieć znaczenie danych w zestawach właściwości.