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 パラメーターは、このモニカーによって識別されるオブジェクトのコンテナーを識別します。 これがモニカー クラスに当てはまる場合は、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