Win32 API 日本語リファレンス
ホームUI.Shell › ISyncMgrHandlerCollection

ISyncMgrHandlerCollection

COM
IIDa7f337a3-d20b-45cb-9ed7-87d094ca5045継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

同期ハンドラー 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。

vtbl 3 HRESULT GetHandlerEnumerator(IEnumString** ppenum)

ユーザーに公開され、ユーザーによって管理される同期ハンドラーの ID にアクセスするための列挙子を取得します。

ppenumIEnumString**outこのメソッドが返るとき、既知の同期ハンドラーの ID を列挙する IEnumString のインスタンスへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

同期ハンドラー ID は、そのハンドラーを一意に表す文字列です。この ID はシステム内のすべてのハンドラーにわたって一意でなければならず、終端の null 文字を含めて最大長 MAX_SYNCMGR_ID に制限されます。

以前のバージョンの Windows では、ハンドラー ID と項目 ID を表すために GUID を使用していました。Windows Vista では、より高い柔軟性のために文字列を使用します。一意性を保証するために文字列に GUID を含めることが引き続き推奨されますが、アプリケーションやデバイスに固有の、ハンドラーにとって有用なその他の情報を含めることもできます。

vtbl 4 HRESULT BindToHandler(LPWSTR pszHandlerID, GUID* riid, void** ppv)

同期センターから呼び出されたときに、指定された同期ハンドラーをインスタンス化します。

pszHandlerIDLPWSTRin同期ハンドラーの ID です。
riidGUID*in要求するインターフェイスの IID です。通常は IID_ISyncMgrHandler になります。IID_ISyncMgrHandler を渡してメソッドが失敗した場合は、より古い ISyncMgrSynchronize インターフェイスの IID である IID_ISyncMgrSynchronize を使用して再度呼び出されます。メソッドが正常に返ると、要求されたインターフェイスへのポインターが ppv パラメーターに参照されます。
ppvvoid**outこのメソッドが返るとき、同期ハンドラーを表すインターフェイスへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。

解説(Remarks)

このメソッドは、同期センターが先に ISyncMgrHandlerCollection::GetHandlerEnumerator を呼び出さずに呼び出されることがあります。これは、同期センターがハンドラーとその項目に関する情報をキャッシュするためです。ハンドラー コレクションは、既存の同期ハンドラーのインターフェイス ポインターを返すことも、新しいインスタンスを作成することもできます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。