다음을 통해 공유


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 표준 반환 값과 다음 값을 반환할 수 있습니다.

반환 코드 Description
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 매개 변수는 이 모니커로 식별된 개체의 컨테이너를 식별합니다. 모니커 클래스의 경우 개체가 컨테이너보다 늦게 변경될 수 없으므로 pmkToLeft 매개 변수에서 GetTimeOfLastChange를 호출하기만 하면 됩니다.
  • ROT는 일반적으로 마지막 변경 시간을 기록하므로 pbc 매개 변수에서 IBindCtx::GetRunningObjectTable을 호출한 다음 IRunningObjectTable::GetTimeOfLastChange를 호출하여 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