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

ISyncMgrHandler

COM
IID04ec2e43-ac77-49f9-9b98-0307ef7a72a2継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

同期ハンドラーが実装する主要インターフェイスを構成するメソッドを公開します。

解説(Remarks)

ISyncMgrHandlerISyncMgrSynchronize を置き換えるものです。以前の機能の一部は簡素化され、一部は他のインターフェイスへ移されました。詳細については各メソッドのページを参照してください。

メソッド 8

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetName(LPWSTR* ppszName)

ハンドラーの表示名を取得します。

ppszNameLPWSTR*outこのメソッドが返るとき、ハンドラー名を受け取る null 終端バッファーへのポインターが格納されます。名前は終端の null 文字を含めて最大 MAX_SYNCMGR_NAME の長さにできます。名前がこの長さを超える場合は切り詰められます。

戻り値

型: HRESULT

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

解説(Remarks)

ハンドラー名は同期センターフォルダーで System.DisplayName (PKEY_DisplayName) プロパティとしてアクセスされます。

同期センターは、UpdateHandler または UpdateHandlerCollection が呼び出されるたびにこのメソッドを呼び出します。ISyncMgrHandler::GetName が失敗するか空文字列を返した場合、ハンドラーは同期センターフォルダーに表示されず、同期センターはそのハンドラーの呼び出しを試みません。

文字列バッファーの割り当ては CoTaskMemAlloc を使用してハンドラーが行う責任があります。同期センターは CoTaskMemFree を通じてバッファーを解放します。

ISyncMgrHandler::GetName は、ハンドラー名を取得するための GetHandlerInfo の使用を置き換えます。

vtbl 4 HRESULT GetHandlerInfo(ISyncMgrHandlerInfo** ppHandlerInfo)

ハンドラーを説明するプロパティを取得します。

ppHandlerInfoISyncMgrHandlerInfo**outこのメソッドが返るとき、ハンドラーのプロパティへのアクセスを提供する ISyncMgrHandlerInfo インターフェイスのインスタンスへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドが失敗した場合でも、ハンドラーは引き続き同期センターフォルダーに表示され、同期センターはそのハンドラーの呼び出しを続けますが、すべてのプロパティには既定値が使用されます。

ISyncMgrHandler::GetHandlerInfo は、ISyncMgrHandler::GetName とともに、以前の GetHandlerInfo を置き換えます。

次の例は、このメソッドの実装を示しています。

STDMETHODIMP CMyDeviceHandler::GetHandlerInfo(
                             __out ISyncMgrHandlerInfo **ppHandlerInfo)
{
    *ppHandlerInfo = NULL;
    HRESULT hr = QueryInterface(IID_ISyncMgrHandlerInfo, 
                                (void **) ppHandlerInfo);
    return hr;
}
vtbl 5 HRESULT GetObject(GUID* rguidObjectID, GUID* riid, void** ppv)

ハンドラーに関連する特定の種類のオブジェクトを作成します。

rguidObjectIDGUID*in

作成するオブジェクトの種類を識別する GUID。shlguid.h で定義されている次の値のいずれかです。

SYNCMGR_OBJECTID_BrowseContent

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、フォルダー、デバイス、ネットワーク上のコンピューター、アプリケーションなど、ハンドラーが管理する項目の内容をユーザーが参照できる UI を表示します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_CAN_BROWSE_CONTENT 機能フラグが設定されている場合のみです。

SYNCMGR_OBJECTID_ConflictStore

ISyncMgrConflictStore インターフェイスを実装するオブジェクトで、ハンドラーが競合を提供できるようにします。これらの競合は同期センターの競合フォルダーに表示されます。競合ストアには、ハンドラー自身の競合に加えて、そのすべての項目の競合を含める必要があります。特定の項目のみの競合を含めるには、同期センターが GetObject を呼び出します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_CONFLICT_STORE 機能フラグが設定されている場合のみです。

SYNCMGR_OBJECTID_EventLinkClick

ISyncMgrEventLinkUIOperation インターフェイスを実装するオブジェクトで、同期結果フォルダーに表示されるイベント上で提供されるリンクのクリック動作を実装します。

SYNCMGR_OBJECTID_EventStore

ISyncMgrEventStore インターフェイスを実装するオブジェクトで、ハンドラーが独自のイベントソースを提供できるようにします。これらのイベントは同期結果フォルダーに表示されます。イベントストアには、ハンドラー自身のイベントに加えて、そのすべての項目のイベントを含める必要があります。特定の項目のイベントのみを含めるには、同期センターが GetObject を呼び出します。イベントストアは、次にハンドラーが同期されるときに、そのハンドラーのイベントを削除するよう要求されます。既定のイベントストアは、ユーザーがログオフするときにイベントを消去します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_EVENT_STORE 機能フラグが設定されている場合のみです。

ハンドラーはイベントストアの提供を必須とされていません。ハンドラーの要件を満たす場合は、同期センターが提供する既定のイベントストアを使用できます。

SYNCMGR_OBJECTID_Icon

ハンドラーのアイコンを表示するために使用される IExtractIcon インターフェイスを実装するアイコン抽出オブジェクト。このオブジェクトは、ハンドラーが実行時に動的にアイコンを取得する場合にのみ提供する必要があります。アイコンを提供する推奨メカニズムは、そのアイコンをレジストリに DefaultIcon として登録することです。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_PROVIDES_ICON 機能フラグが設定されている場合のみです。

SYNCMGR_OBJECTID_QueryBeforeActivate

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、ハンドラーを構成できる UI を表示します。この UI は、ユーザーが同期セットアップフォルダーでハンドラーを選択し、セットアップタスクを選択したときに表示されます。このオブジェクトを要求する前に、同期センターはこの操作用に別のスレッドとハンドラーの新しいインスタンスを作成します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_QUERY_BEFORE_ACTIVATE 機能フラグが設定されており、かつ GetPolicies によって取得されるマスクに SYNCMGR_HPM_PREVENT_ACTIVATE ポリシーフラグが設定されていない場合のみです。

SYNCMGR_OBJECTID_QueryBeforeDeactivate

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、ユーザーが同期センターフォルダーでハンドラーを選択し、削除タスクを選択したときに UI を表示します。このオブジェクトを要求する前に、同期センターはこの操作用に別のスレッドとハンドラーの新しいインスタンスを作成します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_QUERY_BEFORE_DEACTIVATE 機能フラグが設定されており、かつ GetPolicies によって取得されるマスクに SYNCMGR_HPM_PREVENT_DEACTIVATE ポリシーフラグが設定されていない場合のみです。

SYNCMGR_OBJECTID_QueryBeforeEnable

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、ユーザーが同期センターフォルダーでハンドラーを選択し、有効化タスクを選択したときに UI を表示します。このオブジェクトを要求する前に、同期センターはこの操作用に別のスレッドとハンドラーの新しいインスタンスを作成します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_CAN_ENABLE および SYNCMGR_HCM_QUERY_BEFORE_ENABLE 機能フラグが設定されている場合のみです。

SYNCMGR_OBJECTID_QueryBeforeDisable

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、ユーザーが同期センターフォルダーでハンドラーを選択し、無効化タスクを選択したときに UI を表示します。このオブジェクトを要求する前に、同期センターはこの操作用の別のスレッドとハンドラーの新しいインスタンスの両方を作成します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_CAN_DISABLE および SYNCMGR_HCM_QUERY_BEFORE_DISABLE 機能フラグが設定されている場合のみです。

SYNCMGR_OBJECTID_ShowSchedule

ISyncMgrUIOperation インターフェイスを実装するオブジェクトで、ハンドラーのスケジュールをユーザーが構成できる UI を表示します。このオブジェクトを要求する前に、同期センターはこの操作用に別のスレッドとハンドラーの新しいインスタンスを作成します。

同期センターがこのオブジェクトを要求するのは、GetCapabilities によって取得されるマスクに SYNCMGR_HCM_CAN_SHOW_SCHEDULE 機能フラグが設定されている場合のみです。

riidGUID*in要求するインターフェイスの IID。これは rguidObjectID で指定されたオブジェクトの種類に依存します。
ppvvoid**outこのメソッドが返るとき、要求されたインターフェイスへのポインターのアドレスが格納されます。

戻り値

型: HRESULT

成功した場合は S_OK を返し、それ以外の場合はエラー値を返します。ハンドラーが要求された種類のオブジェクトをサポートしていない場合は E_NOTIMPL を返します。

解説(Remarks)

ハンドラーは、要求されたインターフェイスを自身に実装することも、別のオブジェクトに実装することもできます。

次の例は、このメソッドの実装を示しています。

STDMETHODIMP CMyDeviceHandler::GetObject( __in REFGUID   rguidObjectID, 
                                          __in REFIID    riid,
                                          __out void   **ppv)
{
    HRESULT hr = E_NOTIMPL;
    *ppv = NULL;

    if (rguidObjectID == SYNCMGR_OBJECTID_QueryBeforeActivate)
    {
        hr = _CreateSetupObject(riid, ppv);
    }
    else if (rguidObjectID == SYNCMGR_OBJECTID_EventStore)
    {
        hr = _CreateEventStore(NULL, riid, ppv);
    }

    return hr;
}
vtbl 6 HRESULT GetCapabilities(SYNCMGR_HANDLER_CAPABILITIES* pmCapabilities)

ハンドラーに定義された機能を表すフラグのセットを取得します。

pmCapabilitiesSYNCMGR_HANDLER_CAPABILITIES*outこのメソッドが返るとき、ハンドラーの機能を定義する SYNCMGR_HANDLER_CAPABILITIES 列挙体の値のビットごとの組み合わせへのポインターが格納されます。有効な値かどうかを確認するには SYNCMGR_HCM_VALID_MASK と比較してください。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは、UpdateHandler または UpdateHandlerCollection への呼び出しに応じて同期センターによって呼び出されます。

次の例は、このメソッドの実装を示しています。

STDMETHODIMP CMyDeviceHandler::GetCapabilities(
                             __out SYNCMGR_HANDLER_CAPABILITIES *pmCapabilities)
{
    *pmCapabilities = SYNCMGR_HCM_EVENT_STORE
                    | SYNCMGR_HCM_QUERY_BEFORE_ACTIVATE;
    return S_OK;
}
vtbl 7 HRESULT GetPolicies(SYNCMGR_HANDLER_POLICIES* pmPolicies)

ハンドラーが設定したポリシーを表すフラグのセットを取得します。

pmPoliciesSYNCMGR_HANDLER_POLICIES*outこのメソッドが返るとき、ハンドラーのポリシーを定義する SYNCMGR_HANDLER_POLICIES 列挙体の値のビットごとの組み合わせへのポインターが格納されます。

戻り値

型: HRESULT

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

解説(Remarks)

ポリシーとは、通常はサポートされているものの、グループポリシーによって無効化できるアクションのことです。

このメソッドは、UpdateHandler または UpdateHandlerCollection への呼び出しに応じて同期センターによって呼び出されます。

次の例は、このメソッドの実装を示しています。

STDMETHODIMP CMyDeviceHandler::GetPolicies(
                             __out SYNCMGR_HANDLER_POLICIES *pmPolicies)
{
    *pmPolicies = SYNCMGR_HPM_NONE;
    return S_OK;
}
vtbl 8 HRESULT Activate(BOOL fActivate)

ハンドラーの有効化または無効化を要求します。有効なハンドラーは同期できますが、無効なハンドラーは同期できません。

fActivateBOOLin有効化する場合は TRUE、無効化する場合は FALSE

戻り値

型: HRESULT

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

解説(Remarks)

有効なハンドラーは同期センターフォルダーに表示され、同期できます。無効なハンドラーは同期セットアップフォルダーに表示され、同期する前に有効化する(これにより同期センターフォルダーへ移動します)必要があります。

有効化状態を有効/無効状態(enabled state)と混同しないでください。有効なハンドラーを無効(disabled)にすることはできます。これは、そのハンドラーが引き続き同期センターフォルダーに表示されるものの、同期できないことを意味します。

同期センターは次の2つの場合にこのメソッドを呼び出します。

ISyncMgrHandler::GetCapabilities によって取得される値に SYNCMGR_HPM_PREVENT_ACTIVATE フラグが設定されている場合、ハンドラーの有効化を要求するこのメソッドの呼び出しは失敗します。

個々のハンドラーの有効化状態は、IsActive を呼び出すことで確認できます。

ハンドラーが有効化時に何のアクションも実行する必要がない場合は、次の例に示すように S_OK または E_NOTIMPL のいずれかを返すことができます。

次の例は、このメソッドの単純な実装を示しています。

STDMETHODIMP CMyDeviceHandler::Activate(__in BOOL fActivate)
{
    return E_NOTIMPL;
}
vtbl 9 HRESULT Enable(BOOL fEnable)

有効なハンドラーの有効化(enable)または無効化(disable)を要求します。有効化されたハンドラーは同期でき、無効化されたハンドラーは同期できません。

fEnableBOOLin有効化する場合は TRUE、無効化する場合は FALSE

戻り値

型: HRESULT

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

解説(Remarks)

ハンドラーが同期センターフォルダーに表示されるときに、そのショートカットメニューに有効化および無効化の項目を表示するには、ハンドラーが SYNCMGR_HCM_CAN_ENABLE および SYNCMGR_HCM_CAN_DISABLE フラグを設定する必要があります。ハンドラーを有効化することを選択すると同期できるようになり、無効化することを選択すると同期できなくなります。

同期センターは次の2つの場合にこのメソッドを呼び出します。

ハンドラーが有効化時に何のアクションも実行する必要がない場合は、次の例に示すように S_OK または E_NOTIMPL のいずれかを返すことができます。

次の例は、このメソッドの単純な実装を示しています。

STDMETHODIMP CMyDeviceHandler::Enable(__in BOOL fEnable)
{
    return E_NOTIMPL;
}
vtbl 10 HRESULT Synchronize(LPWSTR* ppszItemIDs, DWORD cItems, HWND hwndOwner, ISyncMgrSessionCreator* pSessionCreator, IUnknown* punk)

ハンドラーの同期項目の中から選択された項目の同期を開始します。

ppszItemIDsLPWSTR*in同期する項目を表す項目 ID の配列へのポインター。各項目 ID は終端の null 文字を含めて最大 MAX_SYNCMGR_ID の長さです。
cItemsDWORDinppszItemIDs 内の項目数。
hwndOwnerHWNDin項目が必要な UI を表示するために使用するウィンドウへのハンドル。この値は NULL でもかまいません。
pSessionCreatorISyncMgrSessionCreator*inISyncMgrSessionCreator インターフェイスへのポインター。このインターフェイスにより、ハンドラー自身が進行状況やイベントを報告したり、進行状況やイベントを報告するバックグラウンドプロセスに通知したりできます。
punkIUnknown*inISyncMgrControl に渡されるインターフェイスへのポインター。ISyncMgrHandler::Synchronize は、ユーザーが同期センターフォルダーから同期を要求したとき、または StartSyncAll などの ISyncMgrControl の同期メソッドのいずれかが呼び出されたときに呼び出されます。

戻り値

型: HRESULT

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

解説(Remarks)

ISyncMgrHandler::Synchronize は独自のスレッド上で呼び出されます。同期センターはそのスレッド上でハンドラーオブジェクトとセッション作成オブジェクトをインスタンス化し、その後このメソッドを呼び出します。

ハンドラーは、CreateSession メソッドを呼び出して自身でセッションを作成することも、外部プロセスに同期の実行を通知することもできます。ハンドラーがセッションを作成する場合は、同期が完了するまで ISyncMgrHandler::Synchronize メソッドから戻るべきではありません。ハンドラーが同期を外部プロセスに委譲する場合、その外部プロセスは CoCreateInstance を使用して ISyncMgrSessionCreator インターフェイスを指定して CLSID_SyncMgrClient オブジェクトを作成する必要があります。その後、プロセスは進行状況を報告できるようにセッションを作成します。

ユーザーは項目やハンドラーの同期を停止することを選択できます。アプリケーションも、ISyncMgrControl インターフェイスの StopItemSync などの停止メソッドのいずれかを呼び出すことで同期を停止できます。これらのシナリオをサポートするために、次のメカニズムが提供されています。

ISyncMgrHandler::Synchronize メソッドが呼び出された後、ユーザーが追加の項目の同期を要求した場合、ハンドラーはコールバックの QueryForAdditionalItems メソッドを通じてそれらを問い合わせることで、同じセッション内で新しい項目を同期できます。問い合わせた項目を同期することを選択した場合、AddItemToSession を呼び出すことができます。

一部のハンドラーは、項目が同期されるまでその項目を列挙しません。ハンドラーが同期中にそのような項目を発見した場合、セッションを通じて同期センターにそれらを通知できます。たとえば、ハンドラーが同期セットに追加する項目を発見した場合、ProposeItem を呼び出します。項目が正常に作成されたら、ハンドラーは CommitItem を呼び出します。その時点で、同期センターはその項目をハンドラーに対して追跡している項目のリストに追加します。

ISyncMgrHandler::Synchronize メソッドは、以前の PrepareForSyncSynchronize メソッドを組み合わせたものに相当します。以前のインターフェイスの場合、同期センターは PrepareForSync を呼び出し、その直後に Synchronize を呼び出していました。ISyncMgrHandler::Synchronize メソッドは、これら2つのメソッドの機能を単一の呼び出しにまとめて提供します。

ISyncMgrHandler::SynchronizeSynchronize のもう1つの違いは、以前のメソッドが同期を非同期に実行することを期待されていた点です。Synchronize は1つ以上の外部スレッドに要求をキューイングしてから戻りました。その後、すべての項目の同期が完了すると SynchronizeCompleted を呼び出しました。ISyncMgrHandler::Synchronize は、インプロセス(フォアグラウンド)同期のための同期モデル、またはアウトオブプロセス(バックグラウンド)同期のための非同期モデルをサポートします。

次の例は、このメソッドの実装を示しています。

STDMETHODIMP CMyDeviceHandler::Synchronize(__in_ecount(cItems) LPCWSTR *ppszItemIDs,
                              __in ULONG                   cItems,
                              __in HWND                    hwndOwner,
                              __in ISyncMgrSessionCreator *pCreator,
                              __in_opt IUnknown           *punk)
{
    HRESULT hr = S_OK;

    // Create the session since we are going to perform synchronization in
    // this method.
    ISyncMgrSyncCallback *pCallback = NULL;
    
    hr = pCreator->CreateSession(_szHandlerID, ppszItemIDs, cItems,&pCallback);
    if (SUCCEEDED(hr))
    {
        for (ULONG iItem = 0; iItem < cItems; iItem++)
        {
            SYNCMGR_CANCEL_REQUEST nCancelRequest = SYNCMGR_CR_NONE;
            ULONG   uCurrentStep = 1;
            ULONG   cMaxSteps    = 50;
            LPCWSTR pszItemID    = ppszItemIDs[iItem];
            WCHAR   szProgressText[256];

            // Find the item.
            CMyDeviceSyncItem *pItem = NULL;
            
            // _FindItem is a private class function that abstracts the
            // specifics of how the handler has implemented its storage of 
            // its items. Its internal details can remain transparent as 
            // they have no bearing on this example.
            hr = _FindItem(pszItemID, &pItem);
            if (FAILED(hr))
            {
                // _ReportProgress is another private class function that loads
                // string resources so that reports can be localized rather 
                // than use hard-coded strings. Its internal details have no 
                // bearing on this example.
                _ReportProgress(pCallback, 
                                pszItemID, 
                                IDS_ITEM_NOTFOUND,
                                SYNCMGR_PS_FAILED, 
                                0, 
                                0, 
                                &nCancelRequest);

                if (nCancelRequest != SYNCMGR_CR_NONE)
                {
                    break;
                }
                continue;
            }

            // Send the initial progress report to set min and max values.
            _ReportProgress(pCallback, 
                            pszItemID, 
                            IDS_START_ITEM_SYNC,
                            SYNCMGR_PS_UPDATING, 
                            uCurrentStep, 
                            cMaxSteps,
                            &nCancelRequest);

            for (; uCurrentStep < cMaxSteps; uCurrentStep++)
            {
                if (nCancelRequest != SYNCMGR_CR_NONE)
                {
                    break;
                }

                // Report progress.
                StringCchPrintfW(szProgressText, 
                                 ARRAYSIZE(szProgressText),
                                 L"Entry %d of %d", 
                                 uCurrentStep + 1, 
                                 cMaxSteps);

                pCallback->ReportProgress(pszItemID, 
                                          szProgressText,
                                          SYNCMGR_PS_UPDATING,
                                          uCurrentStep, 
                                          cMaxSteps,
                                          &nCancelRequest);

                // The code that accomplishes the synchronization goes here.
                // This code depends entirely on the nature of the items
                // involved in the sync. 
            }

            // Send the final progress report for this item.
            if (nCancelRequest != SYNCMGR_CR_NONE);
            {
                SYNCMGR_PROGRESS_STATUS nStatus = SYNCMGR_PS_SUCCEEDED;
                if (FAILED(hr))
                {
                    nStatus = SYNCMGR_PS_FAILED;
                }
                _ReportProgress(pCallback, 
                                ppszItemIDs[iItem], 
                                IDS_ITEM_SYNC_DONE,
                                nStatus, 
                                uCurrentStep - 1, 
                                cMaxSteps, 
                                &nCancelRequest);
            }

            hr = S_OK;

            if (nCancelRequest == SYNCMGR_CR_CANCEL_ALL)
            {
                 break;
            }
        }

        pCallback->Release();
    }

    return hr;
}
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_ISyncMgrHandler "{04EC2E43-AC77-49F9-9B98-0307EF7A72A2}"
#usecom global ISyncMgrHandler IID_ISyncMgrHandler "{}"
#comfunc global ISyncMgrHandler_GetName          3 var
#comfunc global ISyncMgrHandler_GetHandlerInfo   4 sptr
#comfunc global ISyncMgrHandler_GetObject        5 var,var,sptr
#comfunc global ISyncMgrHandler_GetCapabilities  6 var
#comfunc global ISyncMgrHandler_GetPolicies      7 var
#comfunc global ISyncMgrHandler_Activate         8 int
#comfunc global ISyncMgrHandler_Enable           9 int
#comfunc global ISyncMgrHandler_Synchronize      10 var,int,sptr,sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。