Bagikan melalui


Implementasi IPropertyStorage-Stand-alone

Implementasi IPropertySetStorage yang disediakan sistem dan berdiri sendiri mencakup implementasi IPropertyStorage, antarmuka yang membaca dan menulis properti dalam penyimpanan set properti. Antarmuka IPropertySetStorage membuat dan membuka kumpulan properti dalam penyimpanan. Antarmuka IEnumSTATPROPSTG dan IEnumSTATPROPSETSTG juga disediakan dalam implementasi yang berdiri sendiri.

Untuk mendapatkan penunjuk ke implementasi IPropertyStorage yang berdiri sendiri, panggil fungsi StgCreatePropStg untuk membuat set properti baru atau StgOpenPropStg untuk mendapatkan penunjuk antarmuka pada set properti yang ada (atau panggil metode Buat atau Buka dari implementasi IPropertySetStorage yang berdiri sendiri).

Implementasi IPropertyStorage yang berdiri sendiri membuat kumpulan properti pada penyimpanan atau objek streaming apa pun, bukan hanya pada penyimpanan dan aliran file majemuk. Implementasi yang berdiri sendiri tidak bergantung pada file campuran dan dapat digunakan dengan implementasi penyimpanan terstruktur apa pun. Untuk informasi selengkapnya tentang implementasi file majemuk antarmuka ini, lihat Implementasi File IPropertyStorage-Compound.

Kapan Digunakan

Gunakan IPropertyStorage untuk mengelola properti dalam satu set properti. Metodenya mendukung membaca, menulis, dan menghapus properti dan nama string opsional yang dapat dikaitkan dengan ID properti. Metode lain mendukung operasi penerapan standar dan mengembalikan penyimpanan. Ada juga metode yang mengatur waktu yang terkait dengan penyimpanan properti, dan metode lain yang mengizinkan penugasan CLSID untuk digunakan untuk mengaitkan kode lain, seperti kode antarmuka pengguna, dengan set properti. Metode Enum memasok pointer ke implementasi IEnumSTATPROPSTG yang berdiri sendiri, yang menghitung properti dalam set.

Format Set Properti Versi 0 dan Versi 1

Implementasi IPropertyStorage yang berdiri sendiri mendukung format serialisasi set properti versi 0 dan versi 1. Untuk informasi selengkapnya, lihat Serialisasi Set Properti. Kumpulan properti dibuat dalam format versi 0 dan tetap dalam format tersebut kecuali fitur baru diminta. Pada saat itu, format diperbarui ke versi 1.

Misalnya, jika kumpulan properti dibuat dengan bendera PROPSETFLAG_DEFAULT, formatnya adalah versi 0. Selama jenis properti yang sesuai dengan format versi 0 ditulis dan dibaca dari kumpulan properti tersebut, set properti tetap dalam format versi 0. Jika jenis properti versi 1 ditulis ke kumpulan properti, kumpulan properti secara otomatis diperbarui ke versi 1. Selanjutnya, set properti tersebut tidak dapat lagi dibaca oleh implementasi yang hanya memahami versi 0.

Jenis IPropertyStorage dan Varian

Implementasi IPropertyStorage yang berdiri sendiri tidak mendukung jenis varian VT_UNKNOWN atau VT_DISPATCH dalam anggota vt struktur PROPVARIANT .

Jenis varian berikut didukung dalam SafeArray; artinya, nilai-nilai ini dapat dikombinasikan dengan VT_ARRAY dalam anggota vt struktur PROPVARIANT .

Jenis varian yang didukung dalam SafeArray oleh implementasi file majemuk IPropertyStorage

VT_I1

VT_UI1

VT_I2

VT_UI2

VT_I4

VT_UI4

VT_INT

VT_UINT

VT_R4

VT_R8

VT_CY

VT_DATE

VT_BSTR

VT_BOOL

VT_DECIMAL

VT_ERROR

VT_VARIANT

 

 

Ketika VT_VARIANT dikombinasikan dengan VT_ARRAY, SafeArray sendiri memegang struktur PROPVARIANT . Namun, jenis elemen ini harus diambil dari daftar sebelumnya, tidak dapat VT_VARIANT, dan tidak dapat menyertakan indikator VT_VECTOR, VT_ARRAY, atau VT_BYREF.

Metode IPropertyStorage

Implementasi IPropertyStorage yang berdiri sendiri mendukung metode berikut:

IPropertyStorage::ReadMultiple

Membaca properti yang ditentukan dalam array rgpspec dan menyediakan nilai semua properti yang valid dalam array rgvar elemen PROPVARIANT .

Dalam implementasi yang disediakan sistem, berdiri sendiri, pengidentifikasi properti duplikat yang merujuk ke stream atau jenis penyimpanan menghasilkan beberapa panggilan ke IStorage::OpenStream atau IStorage::OpenStorage dan keberhasilan atau kegagalan ReadMultiple tergantung pada kemampuan implementasi penyimpanan yang mendasar untuk berbagi penyimpanan terbuka.

Selain itu, untuk memastikan operasi thread-safe jika properti stream- atau storage-valued yang sama diminta beberapa kali melalui penunjuk IPropertyStorage yang sama, pembukaan akan berhasil atau gagal tergantung pada apakah properti sudah terbuka atau tidak dan apakah sistem file yang mendasar menangani beberapa pembukaan aliran atau penyimpanan. Dengan demikian, operasi ReadMultiple pada properti stream atau bernilai penyimpanan selalu menghasilkan panggilan ke IStorage::OpenStream, atau IStorage::OpenStorage, meneruskan akses (STGM_READWRITE, misalnya) dan berbagi nilai (STGM_SHARE_EXCLUSIVE, misalnya) yang ditentukan saat kumpulan properti awalnya dibuka atau dibuat.

Jika metode gagal, nilai yang ditulis ke rgvar[] tidak terdefinisi. Jika beberapa properti bernilai aliran atau penyimpanan berhasil dibuka tetapi kesalahan terjadi sebelum eksekusi selesai, properti ini harus dirilis sebelum metode kembali.

IPropertyStorage::WriteMultiple

Menulis properti yang ditentukan dalam array rgpspec[], menetapkan tag dan nilai PROPVARIANT yang ditentukan dalam rgvar[]. Properti yang sudah ada diberi nilai PROPVARIANT yang ditentukan, dan properti yang saat ini tidak ada dibuat.

IPropertyStorage::D eleteMultiple

Menghapus properti yang ditentukan dalam rgpspec[].

IPropertyStorage::ReadPropertyNames

Membaca nama string yang ada yang terkait dengan ID properti yang ditentukan dalam array rgpropid[].

IPropertyStorage::WritePropertyNames

Menetapkan nama string yang ditentukan dalam array rglpwstrName ke ID properti yang ditentukan dalam array rgpropid .

IPropertyStorage::D eletePropertyNames

Menghapus nama string ID properti yang ditentukan dalam array rgpropid dengan menulis NULL ke nama properti.

IPropertyStorage::SetClass

Mengatur CLSID dari aliran set properti. Dalam implementasi yang berdiri sendiri, mengatur CLSID pada set properti nonsimple (yang dapat berisi properti penyimpanan atau bernilai stream, seperti yang dijelaskan dalam IPropertySetStorage::Create) juga mengatur CLSID pada substorage yang mendasar sehingga dapat diperoleh melalui panggilan ke IStorage::Stat.

IPropertyStorage::Commit

Untuk set properti sederhana dan nonsimple, hapus gambar memori ke subsistem disk. Selain itu, untuk set properti mode bertransaksi nonsimple, metode ini memanggil IStorage::Commit pada set properti.

IPropertyStorage::Revert

Hanya untuk set properti nonsimple, memanggil metode Kembalikan penyimpanan yang mendasar dan membuka kembali aliran 'konten'. Untuk set properti sederhana, hanya mengembalikan E_OK.

IPropertyStorage::Enum

Membuat objek enumerator yang mengimplementasikan IEnumSTATPROPSTG, metode yang dapat dipanggil untuk menghitung struktur STATPROPSTG yang memberikan informasi tentang setiap properti dalam set.

Implementasi ini membuat array tempat seluruh set properti dibaca dan yang dapat dibagikan ketika IEnumSTATPROPSTG::Clone dipanggil.

IPropertyStorage::Stat

Mengisi anggota struktur STATPROPSETSTG , yang berisi informasi tentang properti yang ditetapkan secara keseluruhan. Saat kembali, memasok pointer ke struktur.

Untuk set penyimpanan nonsimple, implementasi ini memanggil IStorage::Stat (atau IStream::Stat) untuk mendapatkan informasi dari penyimpanan atau aliran yang mendasar.

IPropertyStorage::SetTimes

Untuk set properti nonsimple saja, mengatur waktu yang didukung oleh penyimpanan yang mendasar. Implementasi SetTimes ini memanggil metode IStorage::SetElementTimes dari penyimpanan yang mendasarinya untuk memodifikasi waktu. Ini mendukung waktu yang didukung oleh metode yang mendasar yang dapat berupa waktu modifikasi, waktu akses, atau waktu pembuatan.

Implementasi IPropertySetStorage-Stand-alone

IPropertyStorage

IStorage::SetElementTimes

StgOpenPropStg

StgCreatePropStg

StgCreatePropSetStg