Поделиться через


Метод 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 не должна привязываться к каким-либо объектам. Кроме того, реализация должна проверка параметр deadline в контексте привязки и возвращать MK_E_EXCEEDEDDEADLINE, если операция не может быть завершена к указанному времени.

Ниже приведены некоторые стратегии, которые можно использовать в реализации.

  • Для многих типов моникеров параметр pmkToLeft определяет контейнер объекта, определяемого этим моникером. Если это верно для класса моникера, можно просто вызвать GetTimeOfLastChange в параметре pmkToLeft , так как объект не может быть изменен позже, чем его контейнер.
  • Вы можете получить указатель на таблицу выполняющихся объектов (ROT), вызвав метод IBindCtx::GetRunningObjectTable в параметре pbc , а затем вызвав IRunningObjectTable::GetTimeOfLastChange, так как ROT обычно записывает время последнего изменения.
  • Вы можете получить хранилище, связанное с этим моникером (или моникером pmkToLeft ), и вернуть время последнего изменения хранилища с помощью вызова IStorage::Stat.

Примечания, относящиеся к реализации

Реализация Примечания
Антимникер Этот метод возвращает E_NOTIMPL.
Моникер класса Этот метод возвращает MK_E_UNAVAILABLE.
Моникер файла Если этот моникер находится в ROT, этот метод возвращает время последнего изменения, зарегистрированного в нем; в противном случае возвращается время последней записи для файла. Если файл не найден, этот метод возвращает MK_E_NOOBJECT.
Универсальный составной моникер Этот метод создает составную часть pmkToLeft (если не null) и этот моникер и использует ROT для получения времени последнего изменения. Если объект не находится в rot, метод рекурсивно вызывает Метод GetTimeOfLastChange в крайнем правом компоненте составной части, передавая оставшуюся часть составной части в качестве параметра pmkToLeft для этого вызова.
Моникер элемента Если pmkToLeft имеет значение NULL, этот метод возвращает MK_E_NOTBINDABLE. В противном случае метод создает составную часть pmkToLeft и этого моникера и использует ROT для доступа к времени последнего изменения. Если объект не находится в ROT, метод вызывает GetTimeOfLastChange для параметра pmkToLeft .
Моникер OBJREF Этот метод возвращает E_NOTIMPL.
Моникер указателя Этот метод возвращает E_NOTIMPL.
Моникер URL-адреса Этот метод возвращает время последнего изменения объекта, зарегистрированного в ROT.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header objidl.h

См. также раздел

IMoniker

IRunningObjectTable::GetTimeOfLastChange