Bagikan melalui


Menyimpan Set Properti

Aplikasi dapat mengekspos beberapa data status dokumennya sehingga aplikasi lain dapat menemukan dan membaca data tersebut. Beberapa contohnya adalah kumpulan properti yang menjelaskan penulis, judul, dan kata kunci dokumen yang dibuat dengan prosesor kata, atau daftar font yang digunakan dalam dokumen. Fasilitas ini tidak terbatas pada dokumen; ini juga dapat digunakan pada objek yang disematkan. Umumnya, akses ke set properti harus melalui antarmuka IPropertySetStorage dan IPropertyStorage , tetapi bagian ini menjelaskan cara yang direkomendasikan sebelumnya.

Catatan

Jika menyimpan kumpulan properti yang bersifat internal untuk aplikasi Anda, Anda mungkin tidak ingin menggunakan panduan berikut. Untuk mengekspos properti Anda yang diatur ke aplikasi lain, ikuti panduan ini.

 

Untuk menyimpan properti yang diatur dalam file gabungan

  1. Buat instans IStorage atau IStream di tingkat struktur penyimpanan yang sama dengan aliran datanya. Ikuti nama instans IStorage atau IStream Anda dengan "\005." Nama streaming dan penyimpanan yang dimulai dengan 0x05 disediakan untuk set properti umum yang dapat dibagikan di antara aplikasi. Selain itu, aliran yang dimulai dengan nilai tersebut dibatasi hingga 256 KB. Nama-nama dapat dipilih dari nama dan format yang diterbitkan, atau dengan menetapkan properti yang mengatur FMTID dan mendapatkan nama dari FMTID sesuai dengan konvensi yang dijelaskan dalam Konvensi Penamaan Objek Penyimpanan.
  2. Set properti dapat disimpan dalam satu instans IStream atau dalam instans IStorage yang berisi beberapa aliran dan penyimpanan. Dalam kasus instans IStorage , aliran yang terkandung bernama Konten adalah aliran utama yang berisi nilai properti, di mana beberapa nilai mungkin merupakan nama aliran atau instans penyimpanan lain dalam penyimpanan untuk kumpulan properti ini.
  3. Tentukan CLSID dari kelas objek yang dapat menampilkan atau menyediakan akses terprogram ke nilai properti. Jika tidak ada kelas seperti itu, CLSID harus diatur ke pengidentifikasi format set properti. Untuk set properti yang menggunakan instans IStorage , atur CLSID instans IStorage agar sama dengan yang disimpan di aliran Konten atau ke CLSID_NULL; nilai dalam instans IStorage yang baru dibuat.
  4. Anda memiliki opsi untuk menentukan nama yang dapat ditampilkan yang membentuk konten kamus.

Beberapa aplikasi hanya dapat membaca implementasi set properti yang disimpan sebagai instans IStream . Aplikasi harus ditulis untuk mengharapkan bahwa set properti dapat disimpan dalam instans IStorage atau IStream , kecuali definisi set properti menunjukkan sebaliknya. Misalnya, definisi kumpulan properti Informasi Ringkasan menyatakan bahwa itu hanya dapat disimpan dalam instans IStream bernama. Dalam kasus di mana Anda mencari set properti dan tidak tahu apakah itu penyimpanan atau aliran, cari instans IStream dengan nama set properti Anda terlebih dahulu. Jika gagal, cari instans IStorage .

Untuk lebih memahami penyimpanan set properti dalam implementasi IStorage , misalkan ada kelas aplikasi yang mengedit informasi tentang hewan. Pertama, CLSID (CLSID_AnimalApp) didefinisikan untuk serangkaian aplikasi ini, sehingga mereka dapat menunjukkan bahwa mereka memahami kumpulan properti yang berisi informasi hewan (FMTID_AnimalInfo), dan lainnya yang berisi informasi medis (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 = ...

Ketahuilah bahwa CLSID antarmuka IStorage dan kedua set properti CLSID_AnimalApp. Ini mengidentifikasi aplikasi apa pun yang dapat menampilkan dan/atau menyediakan akses terprogram ke set properti ini. Aplikasi apa pun dapat membaca data dalam kumpulan properti (titik di belakang set properti), tetapi hanya aplikasi yang diidentifikasi dengan pengidentifikasi kelas CLSID_AnimalApp yang dapat memahami arti data dalam kumpulan properti.