ISyncMgrHandlerCollection
COM公式ドキュメント
同期ハンドラー ID の列挙子を提供し、それらの同期ハンドラーをインスタンス化するメソッドを公開します。
解説(Remarks)
同期ハンドラーの作成者は、複数のデバイスまたはコンピューターをサポートし、それぞれの詳細を個別に同期するためにこのインターフェイスを実装します。同期センターは、このハンドラー コレクションを使用して個々の同期ハンドラーのインスタンス化を要求します。ISyncMgrHandlerCollection を使用すると、同期ハンドラーの作成者は、各ハンドラーをレジストリに個別に登録するのではなく、動的にハンドラーを同期センターへ追加することもできます。
次の例は、このインターフェイスの実装の概要を示しています。
class CMyHandlerCollection : public ISyncMgrHandlerCollection
{
public:
// IUnknown
// ISyncMgrHandlerCollection
IFACEMETHODIMP GetHandlerEnumerator(__out IEnumString **ppenum);
IFACEMETHODIMP BindToHandler(
__in LPCWSTR pszHandlerID,
__in REFIID riid,
__out void **ppv);
};
STDMETHODIMP CMyHandlerCollection::GetHandlerEnumerator(
__out IEnumString **ppenum)
{
// IDs are retrieved from a data source such as the registry.
// IDs could be retrieved either by this collection class
// or the factory method.
return CEnumMyHandlerIDs_Create(ppenum);
}
STDMETHODIMP CMyHandlerCollection::BindToHandler(
__in LPCWSTR pszHandlerID,
__in REFIID riid,
__out void **ppv)
{
// Map the pszHandlerID to the handler to create. This could be done
// by the factory method or by some other method.
return CMyHandler_Create(pszHandlerID, riid, ppv);
}
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ユーザーに公開され、ユーザーによって管理される同期ハンドラーの ID にアクセスするための列挙子を取得します。
| ppenum | IEnumString** | out | このメソッドが返るとき、既知の同期ハンドラーの ID を列挙する IEnumString のインスタンスへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
同期ハンドラー ID は、そのハンドラーを一意に表す文字列です。この ID はシステム内のすべてのハンドラーにわたって一意でなければならず、終端の null 文字を含めて最大長 MAX_SYNCMGR_ID に制限されます。
以前のバージョンの Windows では、ハンドラー ID と項目 ID を表すために GUID を使用していました。Windows Vista では、より高い柔軟性のために文字列を使用します。一意性を保証するために文字列に GUID を含めることが引き続き推奨されますが、アプリケーションやデバイスに固有の、ハンドラーにとって有用なその他の情報を含めることもできます。
同期センターから呼び出されたときに、指定された同期ハンドラーをインスタンス化します。
| pszHandlerID | LPWSTR | in | 同期ハンドラーの ID です。 |
| riid | GUID* | in | 要求するインターフェイスの IID です。通常は IID_ISyncMgrHandler になります。IID_ISyncMgrHandler を渡してメソッドが失敗した場合は、より古い ISyncMgrSynchronize インターフェイスの IID である IID_ISyncMgrSynchronize を使用して再度呼び出されます。メソッドが正常に返ると、要求されたインターフェイスへのポインターが ppv パラメーターに参照されます。 |
| ppv | void** | out | このメソッドが返るとき、同期ハンドラーを表すインターフェイスへのポインターのアドレスが格納されます。 |
戻り値
型: HRESULT
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
解説(Remarks)
このメソッドは、同期センターが先に ISyncMgrHandlerCollection::GetHandlerEnumerator を呼び出さずに呼び出されることがあります。これは、同期センターがハンドラーとその項目に関する情報をキャッシュするためです。ハンドラー コレクションは、既存の同期ハンドラーのインターフェイス ポインターを返すことも、新しいインスタンスを作成することもできます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISyncMgrHandlerCollection "{A7F337A3-D20B-45CB-9ED7-87D094CA5045}" #usecom global ISyncMgrHandlerCollection IID_ISyncMgrHandlerCollection "{}" #comfunc global ISyncMgrHandlerCollection_GetHandlerEnumerator 3 sptr #comfunc global ISyncMgrHandlerCollection_BindToHandler 4 wstr,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ISyncMgrHandlerCollection "{A7F337A3-D20B-45CB-9ED7-87D094CA5045}" #usecom global ISyncMgrHandlerCollection IID_ISyncMgrHandlerCollection "{}" #comfunc global ISyncMgrHandlerCollection_GetHandlerEnumerator 3 sptr #comfunc global ISyncMgrHandlerCollection_BindToHandler 4 wstr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。