ホーム › System.WindowsSync › ISynchronousDataRetriever
ISynchronousDataRetriever
COM公式ドキュメント
宛先プロバイダーがソースプロバイダーからアイテムデータを取得するための仕組みを表します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
vtbl 3 HRESULT GetIdParameters(ID_PARAMETERS* pIdParameters)
プロバイダーの ID フォーマットスキーマを取得します。(ISynchronousDataRetriever.GetIdParameters)
| pIdParameters | ID_PARAMETERS* | inout | プロバイダーの ID フォーマットスキーマを返します。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
|
vtbl 4 HRESULT LoadChangeData(ILoadChangeContext* pLoadChangeContext, IUnknown** ppUnkData)
変更に対応するアイテムデータを取得します。(ISynchronousDataRetriever.LoadChangeData)
| pLoadChangeContext | ILoadChangeContext* | in | データを取得する対象の変更を記述するメタデータ。 |
| ppUnkData | IUnknown** | out | pLoadChangeContext で指定された変更のアイテムデータを返します。 |
戻り値
返される可能性のあるコードには、次の表に示す値が含まれます (ただしこれらに限定されません)。
| 戻り値 | 説明 |
|---|---|
| メソッドが成功しました。 | |
|
解説(Remarks)
ppUnkData で返されるオブジェクトが実装するデータ取得インターフェースは、ソースプロバイダーが決定します。宛先プロバイダーは、ppUnkData の QueryInterface メソッドを使用してこのインターフェースを取得できます。
例
次の例は、カスタムデータストア内から指定された変更を検索し、その複製を返す LoadChangeData の実装です。
STDMETHODIMP CItemStore::LoadChangeData(
ILoadChangeContext * pLoadChangeContext,
IUnknown ** ppUnkData)
{
HRESULT hr = E_UNEXPECTED;
if (NULL == pLoadChangeContext || NULL == ppUnkData)
{
hr = E_POINTER;
}
else
{
// データストア内でアイテムを検索し、複製して、その IUnknown インターフェースを返します。
ISyncChange* pChange = NULL;
hr = pLoadChangeContext->GetSyncChange(&pChange);
if (SUCCEEDED(hr))
{
SYNC_GID gidItem;
DWORD cbID = sizeof(gidItem);
hr = pChange->GetRootItemId((BYTE*)&gidItem, &cbID);
if (SUCCEEDED(hr))
{
IXMLDOMNode* pNodeItem = NULL;
hr = FindItem(&gidItem, &pNodeItem);
if (SUCCEEDED(hr))
{
IXMLDOMNode* pNodeClone = NULL;
hr = pNodeItem->cloneNode(TRUE, &pNodeClone);
if (SUCCEEDED(hr))
{
hr = pNodeClone->QueryInterface(IID_IUnknown, (void**)ppUnkData);
pNodeClone->Release();
}
pNodeItem->Release();
}
}
pChange->Release();
}
}
return hr;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ISynchronousDataRetriever "{9B22F2A9-A4CD-4648-9D8E-3A510D4DA04B}" #usecom global ISynchronousDataRetriever IID_ISynchronousDataRetriever "{}" #comfunc global ISynchronousDataRetriever_GetIdParameters 3 var #comfunc global ISynchronousDataRetriever_LoadChangeData 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISynchronousDataRetriever "{9B22F2A9-A4CD-4648-9D8E-3A510D4DA04B}" #usecom global ISynchronousDataRetriever IID_ISynchronousDataRetriever "{}" #comfunc global ISynchronousDataRetriever_GetIdParameters 3 sptr #comfunc global ISynchronousDataRetriever_LoadChangeData 4 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。