IPropertyStorage::Metode penerapan (propidl.h)

Metode IPropertyStorage::Commit menyimpan perubahan yang dilakukan pada objek penyimpanan properti ke objek penyimpanan induk.

Sintaks

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parameter

[in] grfCommitFlags

Bendera yang menentukan kondisi di mana penerapan akan dilakukan. Untuk informasi selengkapnya tentang bendera tertentu dan maknanya, lihat bagian Keterangan.

Nilai kembali

Metode ini mendukung nilai pengembalian standar E_UNEXPECTED, serta yang berikut ini:

Keterangan

Seperti IStorage::Commit, metode IPropertyStorage::Commit memastikan bahwa setiap perubahan yang dilakukan pada objek penyimpanan properti tercermin dalam penyimpanan induk.

Dalam mode langsung dalam implementasi file campuran, panggilan ke metode ini menyebabkan perubahan apa pun yang saat ini ada di buffer memori dibersihkan ke aliran properti yang mendasar. Dalam implementasi file campuran untuk set properti nonsimple, IStorage::Commit juga dipanggil pada objek substorage yang mendasar dengan parameter grfCommitFlags yang diteruskan.

Dalam mode bertransaksi, metode ini menyebabkan perubahan tercermin secara permanen dalam gambar persisten objek penyimpanan. Perubahan yang diterapkan harus dilakukan pada set properti ini sejak dibuka atau sejak penerapan terakhir pada pembukaan set properti ini. Metode penerapan menerbitkan perubahan yang dibuat pada satu tingkat objek ke tingkat berikutnya. Tentu saja, ini tetap tunduk pada transaksi tingkat luar apa pun yang mungkin ada pada objek tempat kumpulan properti ini berada. Izin tulis harus ditentukan ketika kumpulan properti dibuka (melalui IPropertySetStorage) pada pembukaan set properti agar operasi penerapan berhasil.

Jika operasi penerapan gagal karena alasan apa pun, status objek penyimpanan properti tetap seperti sebelum penerapan.

Panggilan ini tidak berpengaruh pada properti penyimpanan atau nilai aliran yang ada yang dibuka dari penyimpanan properti ini, tetapi menerapkannya.

Nilai yang valid untuk parameter grfCommitFlags tercantum dalam tabel berikut.

Nilai Makna
STGC_DEFAULT Penerapan sesuai semantik transaksi biasa. Penulis terakhir menang. Bendera ini mungkin tidak ditentukan dengan nilai bendera lainnya.
STGC_ONLYIFCURRENT Menerapkan perubahan hanya jika konten persisten saat ini dari kumpulan properti adalah konten yang menjadi dasar dari perubahan yang akan diterapkan. Artinya, tidak melakukan perubahan jika konten kumpulan properti telah diubah oleh penerapan dari pembukaan lain dari kumpulan properti. Kesalahan STG_E_NOTCURRENT dikembalikan jika penerapan tidak berhasil karena alasan ini.
STGC_OVERWRITE Hanya berguna saat melakukan transaksi yang tidak memiliki tingkat transaksi berlapis luar lebih lanjut, meskipun dapat diterima dalam semua kasus.
Catatan Menunjukkan bahwa penelepon bersedia mengambil risiko beberapa kerusakan data dengan mengorbankan penurunan penggunaan disk pada volume tujuan. Bendera ini berpotensi berguna dalam skenario ruang disk rendah, meskipun harus digunakan dengan hati-hati.
 
 
Catatan Menggunakan IPropertyStorage::Commit untuk menulis properti ke file gambar di Windows XP tidak berfungsi. Format file gambar yang terpengaruh meliputi:
  • .bmp
  • .Dib
  • .emf
  • .gif
  • .Ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • .Rle
  • .Tiff
  • .wmf
Karena bug dalam handler properti file gambar pada Windows XP, memanggil IPropertyStorage::Commit benar-benar membuang perubahan apa pun yang dibuat daripada mempertahankannya.

Solusinya adalah untuk

hilangkan panggilan ke IPropertyStorage::Commit. Memanggil IUnknown::Release pada handler properti file gambar XP tanpa memanggil IPropertyStorage::Commit terlebih dahulu secara implisit melakukan perubahan pada file. Perhatikan bahwa secara umum, memanggil IUnknown::Release tanpa terlebih dahulu memanggil IPropertyStorage::Commit akan membuang perubahan apa pun yang dibuat; solusi ini khusus untuk penangan properti file gambar pada Windows XP. Perhatikan juga bahwa pada versi Windows yang lebih baru, komponen ini berfungsi dengan baik (yaitu, memanggil IPropertyStorage::Commit terus berubah dan memanggil IUnknown::Release tanpa memanggil IPropertyStorage::Commit membuangnya).

 

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows 2000 Server [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header propidl.h (termasuk Objbase.h, Propidlbase.h)
Pustaka Uuid.lib
DLL Ole32.dll

Lihat juga

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit