Как создать неуправляемое приложение синхронизации
В этом разделе показано, как написать на неуправляемом языке, например C++, приложение, использующее платформу MicrosoftSync 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;
}
Следующие шаги
После создания приложения синхронизации может понадобиться создать службу синхронизации. Дополнительные сведения см. в разделе Как создать неуправляемую службу синхронизации. Также можно расширить возможности приложения, зарегистрировав его для получения уведомлений в ходе сеанса. Дополнительные сведения см. в разделе Реагирование на события синхронизации.