Método IMoniker::GetTimeOfLastChange (objidl.h)

Recupera la hora en la que se cambió por última vez el objeto identificado por este moniker.

Sintaxis

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

Parámetros

[in] pbc

Puntero al contexto de enlace que se va a usar en esta operación de enlace. El contexto de enlace almacena en caché los objetos enlazados durante el proceso de enlace, contiene parámetros que se aplican a todas las operaciones mediante el contexto de enlace y proporciona los medios por los que la implementación del moniker debe recuperar información sobre su entorno. Para obtener más información, vea IBindCtx.

[in] pmkToLeft

Si el moniker forma parte de un moniker compuesto, puntero al moniker a la izquierda de este moniker. Los implementadores de moniker usan este parámetro principalmente para permitir la cooperación entre los distintos componentes de un moniker compuesto. Los clientes de Moniker deben pasar NULL.

[out] pFileTime

Puntero a la estructura FILETIME que recibe la hora del último cambio. Un valor de {0xFFFFFFFF,0x7FFFFFFF} indica un error (por ejemplo, límite de tiempo superado, información no disponible).

Valor devuelto

Este método puede devolver los valores devueltos estándar E_OUTOFMEMORY, así como los siguientes valores.

Código devuelto Descripción
S_OK
El método se completó correctamente.
MK_E_EXCEEDEDDEADLINE
No se pudo completar la operación de enlace dentro del límite de tiempo especificado por la estructura de BIND_OPTS del contexto de enlace.
MK_E_CONNECTMANUALLY
La operación no pudo conectarse al almacenamiento de este objeto, posiblemente porque un dispositivo de red no se pudo conectar. Para obtener más información, vea IMoniker::BindToObject.
MK_E_UNAVAILABLE
La hora del cambio no está disponible y no estará disponible independientemente de la fecha límite que se use.

Comentarios

Para ser precisos, la hora devuelta es la primera vez que COM puede identificar después de la cual no se ha producido ningún cambio, por lo que esta vez puede ser posterior a la hora del último cambio en el objeto.

Notas a los autores de llamadas

Si va a almacenar en caché la información devuelta por el objeto identificado por el moniker, puede asegurarse de que la información está actualizada. Para ello, llamaría a GetTimeOfLastChange y compararía la hora devuelta con la hora que recuperó por última vez la información del objeto.

Para los monikers almacenados en objetos vinculados, GetTimeOfLastChange se llama principalmente por la implementación predeterminada del controlador de IOleObject::IsUpToDate. Las aplicaciones contenedora llaman a IOleObject::IsUpToDate para determinar si un objeto vinculado (o un objeto incrustado que contiene objetos vinculados) está actualizado sin enlazar realmente al objeto. Esto permite a una aplicación determinar rápidamente qué objetos vinculados requieren actualización cuando el usuario final abre un documento. A continuación, la aplicación solo puede enlazar los objetos vinculados que necesitan actualizar (después de pedir al usuario final que determine si deben actualizarse) en lugar de enlazar todos los objetos vinculados del documento.

Notas para los implementadores

Es importante realizar esta operación rápidamente porque, para los objetos vinculados, se llama a este método cuando un usuario abre por primera vez un documento compuesto. Por lo tanto, la implementación getTimeOfLastChange no debe enlazarse a ningún objeto. Además, la implementación debe comprobar el parámetro deadline en el contexto de enlace y devolver MK_E_EXCEEDEDDEADLINE si la operación no se puede completar con la hora especificada.

A continuación se muestran algunas estrategias que puede usar en las implementaciones:

  • Para muchos tipos de monikers, el parámetro pmkToLeft identifica el contenedor del objeto identificado por este moniker. Si esto es cierto en la clase moniker, simplemente puede llamar a GetTimeOfLastChange en el parámetro pmkToLeft , ya que un objeto no puede haber cambiado en una fecha posterior a su contenedor.
  • Puede obtener un puntero a la tabla de objetos en ejecución (ROT) llamando a IBindCtx::GetRunningObjectTable en el parámetro pbc y, a continuación, llamando a IRunningObjectTable::GetTimeOfLastChange, porque el ROT registra generalmente la hora del último cambio.
  • Puede obtener el almacenamiento asociado a este moniker (o el moniker pmkToLeft ) y devolver la hora de última modificación del almacenamiento con una llamada a IStorage::Stat.

Notas específicas de la implementación

Implementación Notas
Anti-moniker Este método devuelve E_NOTIMPL.
Moniker de clase Este método devuelve MK_E_UNAVAILABLE.
Moniker de archivo Si este moniker está en el ROT, este método devuelve la última hora de cambio registrada allí; de lo contrario, devuelve la última hora de escritura del archivo. Si no se encuentra el archivo, este método devuelve MK_E_NOOBJECT.
Moniker compuesto genérico Este método crea una composición de pmkToLeft (si no es NULL) y este moniker y usa el ROT para recuperar la hora del último cambio. Si el objeto no está en rot, el método llama recursivamente a GetTimeOfLastChange en el componente más a la derecha del compuesto, pasando el resto del compuesto como parámetro pmkToLeft para esa llamada.
Moniker de elemento Si pmkToLeft es NULL, este método devuelve MK_E_NOTBINDABLE. De lo contrario, el método crea una composición de pmkToLeft y este moniker y usa el ROT para acceder a la hora del último cambio. Si el objeto no está en rot, el método llama a GetTimeOfLastChange en el parámetro pmkToLeft .
OBJREF moniker Este método devuelve E_NOTIMPL.
Moniker de puntero Este método devuelve E_NOTIMPL.
Moniker de dirección URL Este método devuelve la hora del último cambio de un objeto registrado en rot.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objidl.h

Consulte también

Imoniker

IRunningObjectTable::GetTimeOfLastChange