IMoniker::GetTimeOfLastChange 方法 (objidl.h)

检索此名字对象标识的对象上次更改的时间。

语法

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

参数

[in] pbc

指向要在此绑定操作中使用的绑定上下文的指针。 绑定上下文缓存绑定过程中绑定的对象,包含应用于使用绑定上下文的所有操作的参数,并提供名字对象实现应检索有关其环境的信息的方法。 有关详细信息,请参阅 IBindCtx

[in] pmkToLeft

如果名字对象是复合名字对象的一部分,则指向此名字对象左侧的名字对象的指针。 此参数主要由名字对象实现者用来启用复合名字对象的各个组件之间的协作。 名字对象客户端应传递 NULL

[out] pFileTime

指向 FILETIME 结构的指针,该结构接收上次更改的时间。 值 {0xFFFFFFFF,0x7FFFFFFF} 表示错误 (例如,超出时间限制、信息) 不可用。

返回值

此方法可以返回E_OUTOFMEMORY的标准返回值,以及以下值。

返回代码 说明
S_OK
该方法已成功完成。
MK_E_EXCEEDEDDEADLINE
无法在绑定上下文的 BIND_OPTS 结构指定的时间限制内完成绑定操作。
MK_E_CONNECTMANUALLY
操作无法连接到此对象的存储,可能是因为无法连接到网络设备。 有关详细信息,请参阅 IMoniker::BindToObject
MK_E_UNAVAILABLE
更改时间不可用,无论使用的最后期限如何,都将不可用。

注解

确切地说,返回的时间是 COM 可以识别的最早时间,之后未发生任何更改,因此此时间可能晚于对象上次更改的时间。

调用方备注

如果要缓存由名字对象标识的对象返回的信息,可能需要确保信息是最新的。 为此,请调用 GetTimeOfLastChange ,并将返回的时间与上次从对象检索信息的时间进行比较。

对于存储在链接对象中的名字对象, GetTimeOfLastChange 主要由默认处理程序的 IOleObject::IsUpToDate 实现调用。 容器应用程序调用 IOleObject::IsUpToDate 来确定链接对象 (还是包含链接对象的嵌入对象,) 是最新的,但未实际绑定到该对象。 这使应用程序能够在最终用户打开文档时快速确定需要更新的链接对象。 然后,在提示最终用户确定是否应) 更新这些对象而不是绑定文档中的每个链接对象后,应用程序只能绑定那些需要更新 (的链接对象。

实施者说明

快速执行此操作非常重要,因为对于链接对象,此方法是在用户首次打开复合文档时调用的。 因此, GetTimeOfLastChange 实现不应绑定到任何对象。 此外,如果操作无法在指定时间完成,则实现应在绑定上下文中检查截止时间参数并返回MK_E_EXCEEDEDDEADLINE。

以下是可在实现中使用的一些策略:

  • 对于许多类型的名字对象,pmkToLeft 参数标识此名字对象所标识的容器。 如果名字对象类如此,则只需对 pmkToLeft 参数调用 GetTimeOfLastChange,因为对象不能在晚于其容器的日期进行更改。
  • 可以通过对 ) (参数调用 IBindCtx::GetRunningObjectTable,然后调用 IRunningObjectTable::GetTimeOfLastChange 来获取指向 ROT) 正在运行的对象表的指针,因为 ROT 通常记录上次更改的时间。
  • 可以获取与此名字对象关联的存储 (或 pmkToLeft 名字对象) ,并通过调用 IStorage::Stat 返回存储的上次修改时间。

特定于实现的说明

实现 备注
反名字对象 此方法返回E_NOTIMPL。
类名字对象 此方法返回MK_E_UNAVAILABLE。
文件名字对象 如果此名字对象位于 ROT 中,则此方法返回在那里注册的上次更改时间;否则,它将返回文件的上次写入时间。 如果找不到该文件,此方法将返回MK_E_NOOBJECT。
泛型复合名字对象 此方法创建 pmkToLeft (如果非 NULL) 和此名字对象的组合,并使用 ROT 检索上次更改的时间。 如果对象不在 ROT 中,该方法以递归方式在复合的最右侧组件上调用 GetTimeOfLastChange ,将复合的其余部分作为该调用的 pmkToLeft 参数传递。
项名字对象 如果 pmkToLeftNULL,则此方法返回MK_E_NOTBINDABLE。 否则, 方法将创建 pmkToLeft 和此名字对象的组合,并使用 ROT 访问上次更改的时间。 如果对象不在 ROT 中,该方法对 pmkToLeft 参数调用 GetTimeOfLastChange
OBJREF 名字对象 此方法返回E_NOTIMPL。
指针名字对象 此方法返回E_NOTIMPL。
URL 名字对象 此方法返回在 ROT 中注册的对象上次更改的时间。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IMoniker

IRunningObjectTable::GetTimeOfLastChange