ホーム › System.WindowsSync › ISupportLastWriteTime
ISupportLastWriteTime
COM公式ドキュメント
アイテムまたは変更単位 (change unit) が最後に変更された日時を報告できる同期プロバイダーを表します。この機能は、last-writer-wins (最終書き込み優先) の競合解決を実装するアプリケーションにとって有用です。
解説(Remarks)
このインターフェイスは通常、プロバイダーによって実装されます。プロバイダーがこのインターフェイスを実装する場合、そのデータ転送インターフェイスの QueryInterface メソッドに IID_ISupportLastWriteTime が渡されたときに、このインターフェイスへのポインターを返す必要があります。データ転送インターフェイスとは、ISynchronousDataRetriever::LoadChangeData メソッドに応じてプロバイダーが返すインターフェイスです。
last-writer-wins の競合解決を実装するために、アプリケーションは通常、次の手順を実行します。
- 競合の通知を受け取るために ISyncCallback オブジェクトを登録します。
- ISyncCallback::OnConflict メソッド内で、IChangeConflict オブジェクトの IChangeConflict::GetDestinationProviderConflictingData および IChangeConflict::GetSourceProviderConflictingData を呼び出して、競合している変更のデータ転送インターフェイスを取得します。
- 各データ転送インターフェイスの QueryInterface メソッドに IID_ISupportLastWriteTime を渡して、競合している変更を表す ISupportLastWriteTime オブジェクトを取得します。
- ISupportLastWriteTime オブジェクトの GetItemChangeTime または GetChangeUnitChangeTime を呼び出して、変更が行われた最後の日時を取得します。
- 日時の値を比較して、どちらの変更が後に行われたかを判断します。
- IChangeConflict::SetResolveActionForChange メソッドまたは IChangeConflict::SetResolveActionForChangeUnit メソッドを使用して、どちらの変更を保持するかを指定します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したアイテムが最後に変更された日時を取得します。
| pbItemId | BYTE* | in | 検索対象のアイテムの ID。 |
| pullTimestamp | ULONGLONG* | inout | 指定したアイテムが最後に変更された日時。 |
戻り値
戻り値として考えられるコードには、次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
vtbl 4 HRESULT GetChangeUnitChangeTime(BYTE* pbItemId, BYTE* pbChangeUnitId, ULONGLONG* pullTimestamp)
指定した変更単位 (change unit) が最後に変更された日時を取得します。
| pbItemId | BYTE* | in | 検索対象の変更単位を含むアイテムの ID。 |
| pbChangeUnitId | BYTE* | in | 検索対象の変更単位の ID。 |
| pullTimestamp | ULONGLONG* | inout | 指定した変更単位が最後に変更された日時。 |
戻り値
戻り値として考えられるコードには、次の表に示す値が含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは成功しました。 | |
|
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
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 方式にも切替可。#define global IID_ISupportLastWriteTime "{EADF816F-D0BD-43CA-8F40-5ACDC6C06F7A}" #usecom global ISupportLastWriteTime IID_ISupportLastWriteTime "{}" #comfunc global ISupportLastWriteTime_GetItemChangeTime 3 sptr,sptr #comfunc global ISupportLastWriteTime_GetChangeUnitChangeTime 4 sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。