您可以通过实现对帐界面创建一个公文包调和器。至少,协调器实现IReconcilableObject接口和IPersistStorage或IPersistFile接口。作为发起者,公文包确定需要和解的时间,并调用IReconcilableObject::Reconcile成员函数来启动对帐。
虽然调和成员职能可以提供广泛的协调能力,但在大多数情况下,公文包调解员只进行最小化的和解。特别地,公文包不需要协调者来支持残留物产生或支持终止对象。此外,调节器执行单个顶部到底部的对帐,并且不得返回REC_E_NOTCOMPLETE值;也就是说,它不应该尝试部分和解。
公文包提供了IReconcileInitiator界面。公文包调解器可以使用IReconcileInitiator::SetAbortCallback成员函数设置终止对象。公文包不使用版本标识符,因此如果协调器使用IReconcileInitiator中的相应成员函数请求它们,则不能提供文档的以前版本。
公文包将文件名称传递给调和,表示要和解的文档的版本。公文包调解器可以使用IMoniker :: BindToObject或IMoniker :: BindToStorage成员函数访问版本。后者通常更快,被推荐。调解者必须释放与其绑定的任何对象或存储。
当公文包协调器使用BindToStorage时,它将绑定到平面存储(流)或OLE定义的结构化存储的存储。如果调节器期望平面存储,则应使用BindToStorage请求IStream接口。如果调节器期望结构化存储,它应该请求IStorage接口。在这两种情况下,它应该请求对存储的只读直接(非事务)访问;读写访问通常可能不可用。
最小的公文包协调器通常直接看待其他版本的存储,并以非常原始的方式处理嵌入的对象,例如通过在输出版本中包含两个版本来合并对象的两个版本。
启动器通过使用由GetClassFile函数实现的逻辑的子集来确定相应的公文包协调器来确定给定文件的类,然后在注册表中查找与给定文件类关联的协调器类。公文包与其他shell组件一样,仅通过文件扩展名来确定文件的类。文件的扩展名必须具有公文包的注册类以调用该文件的协调器。安装调解器时,您必须设置以下表单的注册表项。
CLSID\【CLSID】\角色\协调器\【调解-的classid】
该类必须快速加载,必须指定为_MULTIPLEUSE,除非为协调接口提供编组,否则必须是一个进程内服务器(包含在DLL中),而不是本地服务器(以.EXE文件实现)。