IMoniker::GetTimeOfLastChange 方法 (objidl.h)

擷取上次變更這個Moniker所識別物件的時間。

語法

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

參數

[in] pbc

要用於這個系結作業之系結內容的指標。 系結內容會在系結程式期間快取系結的物件、包含使用系結內容套用至所有作業的參數,並提供Moniker實作應該擷取其環境相關信息的方法。 如需詳細資訊,請參閱 IBindCtx

[in] pmkToLeft

如果Moniker是複合Moniker的一部分,則指向這個Moniker左邊的Moniker指標。 這個參數主要是由Moniker實作者用來啟用複合Moniker的各種元件之間的合作。 Moniker 用戶端應該傳遞 NULL

[out] pFileTime

接收上次變更時間之 FILETIME 結構的指標。 {0xFFFFFFFF,0x7FFFFFFF} 的值表示錯誤 (例如超過時間限制、無法使用的資訊) 。

傳回值

這個方法可以傳回標準傳回值E_OUTOFMEMORY,以及下列值。

傳回碼 描述
S_OK
已成功完成命令。
MK_E_EXCEEDEDDEADLINE
系結作業無法在系結內容 BIND_OPTS 結構所指定的時間限制內完成。
MK_E_CONNECTMANUALLY
作業無法連線到此物件的記憶體,可能是因為網路裝置無法連線。 如需詳細資訊,請參閱 IMoniker::BindToObject
MK_E_UNAVAILABLE
變更的時間無法使用,無論使用的期限為何,都無法使用。

備註

精確來說,傳回的時間是 COM 最早可以識別之後未發生任何變更的時間,因此這次可能晚於上次變更對象的時間。

來電者附註

如果您要快取 Moniker 所識別的物件所傳回的資訊,您可能會想要確保資訊是最新的。 若要這樣做,您會呼叫 GetTimeOfLastChange ,並將傳回的時間與您上次從 物件擷取的信息時間進行比較。

針對儲存在連結物件內的 Moniker,GetTimeOfLastChange 主要是由默認處理程式的 IOleObject::IsUpToDate 實作所呼叫。 容器應用程式會呼叫 IOleObject::IsUpToDate 來判斷連結的物件 (或包含連結物件的內嵌物件,) 為最新狀態,而不會實際系結至物件。 這可讓應用程式快速判斷當使用者開啟檔時需要更新的連結物件。 然後,應用程式只能在提示用戶判斷是否應該更新) 而不是系結檔中每個鏈接物件之後,才需要更新 (這些鏈接物件。

實作者的注意事項

請務必快速執行這項作業,因為對於連結的物件,當使用者第一次開啟複合檔時會呼叫這個方法。 因此, GetTimeOfLastChange 實作 不應該系結至任何物件。 此外,您的實作應該檢查系結內容中的期限參數,並在指定的時間無法完成作業時傳回MK_E_EXCEEDEDDEADLINE。

以下是一些您可以在實作中使用的策略:

  • 對於許多類型的Moniker,pmkToLeft 參數會識別這個Moniker所識別物件的容器。 如果此為Moniker類別的 true,您可以直接在pmkToLeft 參數上呼叫 GetTimeOfLastChange,因為物件不能在其容器之後的日期變更。
  • 您可以在 ( ROT) 上呼叫 IBindCtx::GetRunningObjectTable,然後呼叫 IRunningObjectTable::GetTimeOfLastChange 來取得執行中對象數據表的指標,因為 ROT 通常會記錄上次變更的時間。
  • 您可以取得與此 Moniker 相關聯的記憶體 (或 pmkToLeft moniker) ,並使用 呼叫 IStorage::Stat 傳回記憶體的上次修改時間。

實作特定附注

實作 備註
反Moniker 這個方法會傳回E_NOTIMPL。
類別Moniker 這個方法會傳回MK_E_UNAVAILABLE。
檔案Moniker 如果這個Moniker位於 ROT 中,這個方法會傳回該處註冊的最後一個變更時間;否則,它會傳回檔案的上次寫入時間。 如果找不到檔案,這個方法會傳回MK_E_NOOBJECT。
泛型複合Moniker 如果非 NULL) 和這個 Moniker,並使用 ROT 擷取上次變更的時間,這個方法會建立 pmkToLeft (的複合。 如果物件不在 ROT 中,方法會以遞歸方式在複合最右邊的元件上呼叫 GetTimeOfLastChange ,並傳遞複合的其餘部分做為該呼叫的 pmkToLeft 參數。
專案Moniker 如果 pmkToLeftNULL,此方法會傳回MK_E_NOTBINDABLE。 否則,方法會建立 pmkToLeft 和這個 Moniker 的複合,並使用 ROT 來存取上次變更的時間。 如果物件不在 ROT 中,此方法會在 pmkToLeft 參數上呼叫 GetTimeOfLastChange
OBJREF Moniker 這個方法會傳回E_NOTIMPL。
指標 Moniker 這個方法會傳回E_NOTIMPL。
URL Moniker 這個方法會傳回在 ROT 中註冊之物件上次變更的時間。

規格需求

需求
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限桌面應用程式]
目標平台 Windows
標頭 objidl.h

另請參閱

IMoniker

IRunningObjectTable::GetTimeOfLastChange