ISyncMgrSessionCreator
COM公式ドキュメント
ハンドラーまたは外部アプリケーションが、同期の開始を Sync Center に通知したり、進行状況やイベントを報告したりするための単一のメソッドを公開します。
解説(Remarks)
このインターフェイスは ISyncMgrHandler::Synchronize に渡されます。ハンドラーは、その Synchronize 実装内でセッションを作成することを選択できます。これにより、ハンドラー自身が進行状況やイベントを報告したり、進行状況やイベントを報告するバックグラウンドプロセスへシグナルを送ったりできます。
あるいは、ハンドラーは外部プロセスにシグナルを送って CLSID_SyncMgrClient オブジェクトを作成させることもできます。ハンドラーがサービスなどの外部プロセスで自動同期を実行するように実装されている場合、Sync Center がユーザー向けの UI を更新できるよう、Sync Center に進行状況を報告できる必要があります。また、ハンドラーは Sync Center の Sync Results フォルダーにイベントを追加できる必要もあります。外部プロセスは、CLSCTX_SERVER フラグと ISyncMgrSessionCreator IID を CoCreateInstance に渡すことで CLSID_SyncMgrClient オブジェクトを作成します。これにより、そのプロセスは進行状況やイベントを報告できるほか、ユーザーが同期をキャンセルしたかどうかを Sync Center に問い合わせることもできます。ただし、ISyncMgrSessionCreator は外部プロセスへマーシャリングできない点に注意してください。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定された項目の同期が開始されたことを Sync Center に通知します。
| pszHandlerID | LPWSTR | in | ハンドラーの一意な ID を格納したバッファーへのポインター。この文字列は、終端の null 文字を含めて最大長 MAX_SYNCMGR_ID です。 |
| ppszItemIDs | LPWSTR* | in | pszHandlerID で指定されたハンドラーが管理する、同期対象の項目 ID の配列を格納したバッファーへのポインターのアドレス。各 ID は、終端の null 文字を含めて最大長 MAX_SYNCMGR_ID です。 |
| cItems | DWORD | in | ppszItemIDs で参照されるバッファーに格納された項目 ID の数。 |
| ppCallback | ISyncMgrSyncCallback** | out | 進行状況やイベントを報告するために使用する ISyncMgrSyncCallback のインスタンスへのポインターのアドレス。コールバックが不要な場合、この値は NULL にできます。 |
戻り値
型: HRESULT
このメソッドが成功した場合、S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
pszHandlerID と ppszItemIDs の両方を指定する必要があります。
例
次の例は、このメソッドの実装の概要を示しています。
STDMETHODIMP CMyDeviceHandler::Synchronize(...)
{
...
ISyncMgrSyncCallback *pCallback = NULL;
hr = pCreator->CreateSession(_pszHandlerID, ppszItemIDs, cItems, &pCallback);
if (SUCCEEDED(hr))
{
// 同期を実行します。
}
return hr;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISyncMgrSessionCreator "{17F48517-F305-4321-A08D-B25A834918FD}" #usecom global ISyncMgrSessionCreator IID_ISyncMgrSessionCreator "{}" #comfunc global ISyncMgrSessionCreator_CreateSession 3 wstr,var,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISyncMgrSessionCreator "{17F48517-F305-4321-A08D-B25A834918FD}" #usecom global ISyncMgrSessionCreator IID_ISyncMgrSessionCreator "{}" #comfunc global ISyncMgrSessionCreator_CreateSession 3 wstr,sptr,int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。