Win32 API 日本語リファレンス
ホームSystem.WindowsSync › ISupportLastWriteTime

ISupportLastWriteTime

COM
IIDeadf816f-d0bd-43ca-8f40-5acdc6c06f7a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

アイテムまたは変更単位 (change unit) が最後に変更された日時を報告できる同期プロバイダーを表します。この機能は、last-writer-wins (最終書き込み優先) の競合解決を実装するアプリケーションにとって有用です。

解説(Remarks)

このインターフェイスは通常、プロバイダーによって実装されます。プロバイダーがこのインターフェイスを実装する場合、そのデータ転送インターフェイスの QueryInterface メソッドに IID_ISupportLastWriteTime が渡されたときに、このインターフェイスへのポインターを返す必要があります。データ転送インターフェイスとは、ISynchronousDataRetriever::LoadChangeData メソッドに応じてプロバイダーが返すインターフェイスです。

last-writer-wins の競合解決を実装するために、アプリケーションは通常、次の手順を実行します。

  1. 競合の通知を受け取るために ISyncCallback オブジェクトを登録します。
  2. ISyncCallback::OnConflict メソッド内で、IChangeConflict オブジェクトの IChangeConflict::GetDestinationProviderConflictingData および IChangeConflict::GetSourceProviderConflictingData を呼び出して、競合している変更のデータ転送インターフェイスを取得します。
  3. 各データ転送インターフェイスの QueryInterface メソッドに IID_ISupportLastWriteTime を渡して、競合している変更を表す ISupportLastWriteTime オブジェクトを取得します。
  4. ISupportLastWriteTime オブジェクトの GetItemChangeTime または GetChangeUnitChangeTime を呼び出して、変更が行われた最後の日時を取得します。
  5. 日時の値を比較して、どちらの変更が後に行われたかを判断します。
  6. IChangeConflict::SetResolveActionForChange メソッドまたは IChangeConflict::SetResolveActionForChangeUnit メソッドを使用して、どちらの変更を保持するかを指定します。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetItemChangeTime(BYTE* pbItemId, ULONGLONG* pullTimestamp)

指定したアイテムが最後に変更された日時を取得します。

pbItemIdBYTE*in検索対象のアイテムの ID。
pullTimestampULONGLONG*inout指定したアイテムが最後に変更された日時。

戻り値

戻り値として考えられるコードには、次の表に示す値が含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
プロバイダーが定義するエラーコード
vtbl 4 HRESULT GetChangeUnitChangeTime(BYTE* pbItemId, BYTE* pbChangeUnitId, ULONGLONG* pullTimestamp)

指定した変更単位 (change unit) が最後に変更された日時を取得します。

pbItemIdBYTE*in検索対象の変更単位を含むアイテムの ID。
pbChangeUnitIdBYTE*in検索対象の変更単位の ID。
pullTimestampULONGLONG*inout指定した変更単位が最後に変更された日時。

戻り値

戻り値として考えられるコードには、次の表に示す値が含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは成功しました。
プロバイダーが定義するエラーコード
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ISupportLastWriteTime "{EADF816F-D0BD-43CA-8F40-5ACDC6C06F7A}"
#usecom global ISupportLastWriteTime IID_ISupportLastWriteTime "{}"
#comfunc global ISupportLastWriteTime_GetItemChangeTime        3 var,var
#comfunc global ISupportLastWriteTime_GetChangeUnitChangeTime  4 var,var,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。