Bagikan melalui


Metode IMoniker::GetTimeOfLastChange (objidl.h)

Mengambil waktu di mana objek yang diidentifikasi oleh moniker ini terakhir diubah.

Sintaks

HRESULT GetTimeOfLastChange(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [out] FILETIME *pFileTime
);

Parameter

[in] pbc

Penunjuk ke konteks ikatan yang akan digunakan dalam operasi pengikatan ini. Konteks ikatan menyimpan objek yang terikat selama proses pengikatan, berisi parameter yang berlaku untuk semua operasi menggunakan konteks ikatan, dan menyediakan sarana di mana implementasi moniker harus mengambil informasi tentang lingkungannya. Untuk informasi selengkapnya, lihat IBindCtx.

[in] pmkToLeft

Jika moniker adalah bagian dari moniker komposit, arahkan ke moniker di sebelah kiri moniker ini. Parameter ini terutama digunakan oleh pelaksana moniker untuk memungkinkan kerja sama antara berbagai komponen moniker komposit. Klien Moniker harus melewati NULL.

[out] pFileTime

Penunjuk ke struktur FILETIME yang menerima waktu perubahan terakhir. Nilai {0xFFFFFFFF,0x7FFFFFFF} menunjukkan kesalahan (misalnya, melebihi batas waktu, informasi tidak tersedia).

Nilai kembali

Metode ini dapat mengembalikan nilai pengembalian standar E_OUTOFMEMORY, serta nilai berikut.

Menampilkan kode Deskripsi
S_OK
Metode berhasil diselesaikan.
MK_E_EXCEEDEDDEADLINE
Operasi pengikatan tidak dapat diselesaikan dalam batas waktu yang ditentukan oleh struktur BIND_OPTS konteks ikat.
MK_E_CONNECTMANUALLY
Operasi tidak dapat tersambung ke penyimpanan untuk obyek ini, mungkin karena perangkat jaringan tidak dapat disambungkan. Untuk informasi selengkapnya, lihat IMoniker::BindToObject.
MK_E_UNAVAILABLE
Waktu perubahan tidak tersedia dan tidak akan tersedia terlepas dari tenggat waktu yang digunakan.

Keterangan

Tepatnya, waktu yang dikembalikan adalah waktu paling awal yang dapat diidentifikasi COM setelah itu tidak ada perubahan yang terjadi, sehingga waktu ini mungkin lebih lambat dari waktu perubahan terakhir pada objek.

Catatan untuk Penelepon

Jika Anda menyimpan cache informasi yang dikembalikan oleh objek yang diidentifikasi oleh moniker, Anda mungkin ingin memastikan bahwa informasi Anda sudah diperbarui. Untuk melakukannya, Anda akan memanggil GetTimeOfLastChange dan membandingkan waktu yang dikembalikan dengan waktu terakhir Kali Anda mengambil informasi dari objek.

Untuk moniker yang disimpan dalam objek tertaut, GetTimeOfLastChange terutama dipanggil oleh implementasi handler default dari IOleObject::IsUpToDate. Aplikasi kontainer memanggil IOleObject::IsUpToDate untuk menentukan apakah objek tertaut (atau objek tersemat yang berisi objek tertaut) sudah diperbarui tanpa benar-benar mengikat objek. Ini memungkinkan aplikasi untuk menentukan dengan cepat objek tertaut mana yang perlu diperbarui saat pengguna akhir membuka dokumen. Aplikasi kemudian hanya dapat mengikat objek tertaut yang perlu diperbarui (setelah meminta pengguna akhir untuk menentukan apakah mereka harus diperbarui) alih-alih mengikat setiap objek yang ditautkan dalam dokumen.

Catatan untuk Pelaksana

Penting untuk melakukan operasi ini dengan cepat karena, untuk objek tertaut, metode ini dipanggil ketika pengguna pertama kali membuka dokumen campuran. Akibatnya, implementasi GetTimeOfLastChange Anda tidak boleh mengikat objek apa pun. Selain itu, implementasi Anda harus memeriksa parameter tenggat waktu dalam konteks ikatan dan mengembalikan MK_E_EXCEEDEDDEADLINE jika operasi tidak dapat diselesaikan pada waktu yang ditentukan.

Berikut adalah beberapa strategi yang dapat Anda gunakan dalam implementasi Anda:

  • Untuk banyak jenis moniker, parameter pmkToLeft mengidentifikasi kontainer objek yang diidentifikasi oleh moniker ini. Jika ini benar dari kelas moniker Anda, Anda cukup memanggil GetTimeOfLastChange pada parameter pmkToLeft , karena objek tidak dapat berubah pada tanggal yang lebih lambat dari kontainernya.
  • Anda bisa mendapatkan penunjuk ke tabel objek yang sedang berjalan (ROT) dengan memanggil IBindCtx::GetRunningObjectTable pada parameter pbc lalu memanggil IRunningObjectTable::GetTimeOfLastChange, karena ROT umumnya merekam waktu perubahan terakhir.
  • Anda bisa mendapatkan penyimpanan yang terkait dengan moniker ini (atau moniker pmkToLeft ) dan mengembalikan waktu modifikasi terakhir penyimpanan dengan panggilan ke IStorage::Stat.

Catatan khusus implementasi

Implementasi Catatan
Anti-moniker Metode ini mengembalikan E_NOTIMPL.
Moniker kelas Metode ini mengembalikan MK_E_UNAVAILABLE.
Moniker file Jika moniker ini berada dalam ROT, metode ini mengembalikan waktu perubahan terakhir yang terdaftar di sana; jika tidak, ia mengembalikan waktu tulis terakhir untuk file. Jika file tidak dapat ditemukan, metode ini mengembalikan MK_E_NOOBJECT.
Moniker komposit generik Metode ini membuat komposit pmkToLeft (jika non-NULL) dan moniker ini dan menggunakan ROT untuk mengambil waktu perubahan terakhir. Jika objek tidak berada dalam ROT, metode secara rekursif memanggil GetTimeOfLastChange pada komponen paling kanan komposit, meneruskan sisa komposit sebagai parameter pmkToLeft untuk panggilan tersebut.
Moniker item Jika pmkToLeftadalah NULL, metode ini mengembalikan MK_E_NOTBINDABLE. Jika tidak, metode ini membuat komposit pmkToLeft dan moniker ini dan menggunakan ROT untuk mengakses waktu perubahan terakhir. Jika objek tidak ada di ROT, metode memanggil GetTimeOfLastChange pada parameter pmkToLeft .
Moniker OBJREF Metode ini mengembalikan E_NOTIMPL.
Penunjuk moniker Metode ini mengembalikan E_NOTIMPL.
Moniker URL Metode ini mengembalikan waktu perubahan terakhir objek yang terdaftar dalam ROT.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header objidl.h

Lihat juga

IMoniker

IRunningObjectTable::GetTimeOfLastChange