如何创建非托管同步应用程序

本主题说明如何使用非托管语言(如 C++)创建一个应用程序,该应用程序使用 Microsoft Sync Framework 来创建同步会话并将其连接到源提供程序和目标提供程序。

本主题假定您基本熟悉 C++ 和 COM 概念。

本主题中的示例着重介绍以下 Sync Framework 组件:

了解同步应用程序

同步应用程序是一个软件组件,它创建同步会话,将会话与两个同步提供程序相连,使用该会话来启动同步,并在同步过程中承载 Sync Framework。

有关同步应用程序的角色的更多信息,请参见实现同步应用程序

生成要求

  • Synchronization.h:Sync Framework 组件的声明。

    #include <synchronization.h>
    
  • SynchronizationErrors.h:自定义错误代码。

    #include <synchronizationerrors.h>
    
  • Synchronization.lib:导入库。

示例

本主题中的示例代码说明如何创建同步会话,如何通过源和目标提供程序对它进行初始化,以及如何启动此会话。本示例还介绍一种向用户显示会话统计信息的方法。

请注意,应用程序可以按照最适合此类应用程序的方法获得提供程序。本示例假设应用程序已经具有两个 ISyncProvider 接口 接口:一个接口表示源副本,另一个接口表示目标副本。

创建和启动同步会话

这些示例使用 CoCreateInstance 来创建 IApplicationSyncServices 对象。然后,使用此对象来创建和初始化会话对象。此时将启动此会话。当同步完成时,将在消息框中向用户显示会话统计信息。

HRESULT Synchronize(ISyncProvider* pProvSrc, ISyncProvider* pProvDest)
{
    HRESULT hr = E_UNEXPECTED;

    IApplicationSyncServices* pSvc = NULL;
    hr = CoCreateInstance(CLSID_SyncServices, NULL, CLSCTX_INPROC_SERVER, 
        IID_IApplicationSyncServices, (void**)&pSvc);
    if (SUCCEEDED(hr))
    {
        ISyncSession* pSession = NULL;
        hr = pSvc->CreateSyncSession(pProvDest, pProvSrc, &pSession);
        if (SUCCEEDED(hr))
        {
            SYNC_SESSION_STATISTICS syncStats;
            // Arbitrarily choose "destination wins" conflict resolution.
            hr = pSession->Start(CRP_DESTINATION_PROVIDER_WINS, &syncStats);
            if (SUCCEEDED(hr))
            {
                // Display the session statistics to the user.
                CString strMsg;
                strMsg.Format(L"%d changes succeeded.\n%d changes failed.", syncStats.dwChangesApplied,
                    syncStats.dwChangesFailed);
                MessageBox(NULL, strMsg.GetString(), L"Synchronization Statistics", MB_ICONINFORMATION);
            }

            pSession->Release();
        }

        pSvc->Release();
    }

    return hr;
}

后续步骤

既然您已创建了同步应用程序,您可能希望创建同步提供程序。有关更多信息,请参见如何创建非托管同步提供程序。您可能还希望通过注册此应用程序以在会话过程中接收通知,从而增强该应用程序。有关更多信息,请参见响应同步事件

请参阅

参考

ISyncSession 接口
SYNC_SESSION_STATISTICS 结构

概念

实现同步应用程序