ISyncMgrEventStore
COM公式ドキュメント
ハンドラーが既定の同期センター (Sync Center) のイベント ストアを使用する代わりに、独自のイベント ストアを提供し、独自の同期イベントを管理できるようにするメソッドを公開します。これらのイベントは Sync Results フォルダーに表示されます。
解説(Remarks)
実装のタイミング
同期センターは、ハンドラーがイベントを報告するために使用できる既定のイベント ストアを提供し、それらのイベントは Sync Results フォルダーに表示されます。コンポーネントが既にイベントをログに記録している場合は、そのハンドラー用のイベントを列挙する独自のイベント ストアを提供する方が便利な場合があります。この場合のイベント ストアは、単にコンポーネントによってログに記録されたイベントを、同期センターで使用できる形式に変換するだけです。同期センターは、まず ISyncMgrHandler::GetCapabilities が返すマスクで SYNCMGR_HCM_EVENT_STORE フラグを調べることによって、ハンドラーにイベント ストアを要求します。その値が存在する場合、同期センターは SYNCMGR_OBJECTID_EventStore 値を指定して ISyncMgrHandler::GetObject を呼び出します。また、ハンドラーは ISyncMgrSyncItem::GetCapabilities が返すマスクに SYNCMGR_ICM_EVENT_STORE フラグを設定することで、項目でフィルター処理されたイベント ストアを提供することもできます。
イベント ストアにイベントが追加された場合、ハンドラー (または関連するコンポーネント) は ISyncMgrControl::UpdateEvents を呼び出して、Sync Results フォルダーとエラー数を更新できるようにする必要があります。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ハンドラーのイベントの列挙子を取得します。
| ppenum | IEnumSyncMgrEvents** | out | このメソッドが返されるとき、ハンドラーのイベントにアクセスするために使用できる IEnumSyncMgrEvents インスタンスへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
このメソッドは、ユーザーが Sync Results フォルダーに移動したとき、またはハンドラーの Errors リンクをクリックしたときに、同期センターによって呼び出されます。
例
次の例は、ISyncMgrEventStore::GetEventEnumerator の実装を示しています。
STDMETHODIMP CMyDeviceEventStore::GetEventEnumerator(
__out IEnumSyncMgrEvents **ppenum)
{
HRESULT hr = CEnumMyDeviceSyncMgrEvents_Create(ppenum);
return hr;
}
イベント数を取得します。
| pcEvents | DWORD* | out | イベント数の値へのポインター。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定されたイベント オブジェクトを取得します。
| rguidEventID | GUID* | in | イベント GUID への参照。 |
| ppEvent | ISyncMgrEvent** | out | ISyncMgrEvent インターフェイス ポインターのアドレス。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
指定されたイベントを削除します。
| pguidEventIDs | GUID* | in | イベント GUID へのポインター。 |
| cEvents | DWORD | in | 削除するイベントの数。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISyncMgrEventStore "{37E412F9-016E-44C2-81FF-DB3ADD774266}" #usecom global ISyncMgrEventStore IID_ISyncMgrEventStore "{}" #comfunc global ISyncMgrEventStore_GetEventEnumerator 3 sptr #comfunc global ISyncMgrEventStore_GetEventCount 4 var #comfunc global ISyncMgrEventStore_GetEvent 5 var,sptr #comfunc global ISyncMgrEventStore_RemoveEvent 6 var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISyncMgrEventStore "{37E412F9-016E-44C2-81FF-DB3ADD774266}" #usecom global ISyncMgrEventStore IID_ISyncMgrEventStore "{}" #comfunc global ISyncMgrEventStore_GetEventEnumerator 3 sptr #comfunc global ISyncMgrEventStore_GetEventCount 4 sptr #comfunc global ISyncMgrEventStore_GetEvent 5 sptr,sptr #comfunc global ISyncMgrEventStore_RemoveEvent 6 sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。