简介
已经为同步服务提供程序 (SSP) 添加了附加接口。这些接口可以帮助同步服务提供程序更好地与用户进行交互。OnSSPEnable 和 OnSSPDisable 使 SSP 能够对在选项对话框中单击启用复选框的用户作出反应。如果多个 SSP 需要彼此交互,或者 SSP 需要在其被启用或禁用时通知其他进程,这将十分有用。
IReplStore2 接口使 SSP 能够在所有情况下显示设置对话框。如果 SSP 没有实现该接口,并且在显示选项对话框之前没有启用 SSP,则 ActiveSync 将不会显示设置。
这些接口可用于 ActiveSync 版本 3.7.1 及更高版本。
详细的接口说明
OnSSPEnable
这是 SSP 可以导出的一个新函数。在 ActiveSync 选项对话框中启用 SSP 时,系统将调用该函数。
该函数的原型是:
HRESULT WINAPI OnSSPEnable (HWND hwndParent);
• hwndParent 在该函数被调用时,SSP 应该用于为所显示的任何对话框提供父级窗口的 HWND。
• Return Value ActiveSync 引擎不处理返回值。该函数应该返回 S_OK。
备注:在该函数被调用之前,可能尚未调用 IReplStore::Initialize 函数,因此您不能使用任何依赖于 IReplStore::Initialize 调用的内部变量。
以下为已导出该函数的示例 .def 文件:
LIBRARY
"STSYNC"
EXPORTS
DllCanUnloadNow
PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
OnSSPEnable
OnSSPDisable
OnSSPDisable
这是 SSP 可以导出的一个新函数。在 ActiveSync 选项对话框中禁用 SSP 时,系统将调用该函数。
该函数使用以下原型:
HRESULT
WINAPI OnSSPDisable (HWND hwndParent);
• hwndParent 在该函数被调用时,SSP 应该用于为所显示的任何对话框提供父级窗口的 HWND。
• Return Value ActiveSync 引擎不处理返回值。该函数应该返回 S_OK。
备注:在该函数被调用之前,可能尚未调用 IReplStore::Initialize 函数,因此您不能使用任何依赖于 IReplStore::Initialize 调用的内部变量。
以下为已导出该函数的示例 .def 文件:
LIBRARY
"STSYNC"
EXPORTS
DllCanUnloadNow
PRIVATE
DllGetClassObject PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
OnSSPEnable
OnSSPDisable
IReplStore2
这是一个派生自 IReplStore 的新接口,它使 SSP 能够在启用之前显示其设置对话框。
该接口定义如下:
//
//=========== IReplStore2 ==============
//
DEFINE_GUID (IID_IReplStore2,
// 4a696d00-f75f-11d2-b549-00c04f5b9a11
0x4a696d00,
0xf75f,
0x11d2,
0xb5, 0x49, 0x00, 0xc0, 0x4f, 0x5b, 0x9a, 0x11
);
#undef
INTERFACE
#define INTERFACE
IReplStore2
DECLARE_INTERFACE_( IReplStore2, IReplStore )
{
// *** IReplStore2 methods ***
// UI related routines
STDMETHOD(DoOptionsDialog)
( THIS_ HWND hwndParent, LPCSTR lpszObjType,
IReplNotify * pntfy) PURE;
};
HRESULT DoOptionsDialog (HWND hwndParent, LPCSTR lpszObjType, IReplNotify * pntfy);
• hwndParent 在该函数被调用时,SSP 应该用于为所显示的任何对话框提供父级窗口的 HWND。
• lpszObjType要显示设置的文件夹的名称。
• Pntfy IReplNotify 的指针。
• Return Value该函数应该返回下列值之一。
NOERROR
User selected OK to save the changes
RERR_CANCEL
User selected Cancel
备注:在该函数被调用之前,可能尚未调用 IReplStore::Initialize 函数,因此您不能使用任何依赖于 IReplStore::Initialize 调用的内部变量。
必须将 SSP 标记为版本 3 才能使用该接口。当您注册 SSP 时,请在 HKEY CLASSES ROOT\{prog id} 下创建一个名为“Version”、值为 0x00030000 的 DWORD 注册表值。
示例:
[HKEY_CLASSES_ROOT\MS.WinCE.StockPor2]
@="StockPor"
"Display Name"="Stock Sample"
"Version"=dword:00030000:
IReplStore2 接口定义在新的 cesync.h 头文件中,该文件包含在 Developer Resources for Windows Mobile 2003 Second Edition 中。
小结
IReplStore2 接口使开发人员能够在用户启用和禁用同步服务提供程序时为其提供更为健壮的体验。该接口无须实现,因为并非所有同步服务提供程序都需要实现该功能。