如何创建非托管同步应用程序
本主题说明如何使用非托管语言(如 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 结构