IReconcilableObject::Reconcile 方法 (reconcil.h)

协调对象的状态与一个或多个其他对象。 通过合并所有对象的状态以形成组合状态,对帐更新对象的内部状态。

语法

HRESULT Reconcile(
  IReconcileInitiator *pInitiator,
  DWORD               dwFlags,
  HWND                hwndOwner,
  HWND                hwndProgressFeedback,
  ULONG               ulcInput,
  IMoniker            **rgpmkOtherInput,
  PLONG               plOutIndex,
  IStorage            *pstgNewResidues,
  PVOID               pvReserved
);

parameters

pInitiator

类型: IReconcileInitiator*

对帐过程的发起者的 IReconcileInitiator 接口的地址。 此参数不得为 NULL

dwFlags

类型:DWORD

对帐的控制标志。 此参数可以是零,也可以是以下值的组合:

RECONCILEF_FEEDBACKWINDOWVALID

hwndProgressFeedback 参数有效。

RECONCILEF_MAYBOTHERUSER

如果需要,公文包协调器可以提示用户交互。 如果没有此值,则不允许用户交互。 hwndOwner 参数有效。

RECONCILEF_NORESIDUESOK

公文包协调器可以忽略对残留物的请求并执行对帐。 每当发起程序请求残渣时,不支持残渣的协调器应检查此值。 如果没有此值,则不支持残留的协调器必须立即返回REC_E_NORESIDUES。

RECONCILEF_OMITSELFRESIDUE

公文包协调器可以丢弃与此对象关联的任何残留物。 发起方通常将此值用于从一代到一代循环的对帐。

RECONCILEF_ONLYYOUWERECHANGED

正在调用 协调 方法,以将更改对象中的更改传播到其他未更改的对象。 仅当注册表中存在以下项时,才会设置此值。

HKEY_CLASSES_ROOT
   CLSID
      {CLSID of reconciler}
         SingleChangeHook

如果注册表中不存在此键,则发起程序将通过使其他未更改的对象成为已更改对象的二进制相同副本来执行对帐。 rgpmkOtherInput 名字对象标识其他对象。 仅当同时设置了RECONCILEF_YOUMAYDOTHEUPDATES时,才会在 dwFlags 中设置此值。 如果公文包协调器成功完成更新本身,则应返回REC_S_IDIDTHEUPDATES,并且 plOutIndex 参数指向的变量应设置为 -1L。 请注意,如果在 dwFlags 中设置了此值,则不应在成功时返回S_OK。 如果 协调 返回REC_S_IDIDTHEUPDATES,则发起程序不会保存源对象的存储。 如果协调器希望回退到发起程序的位复制实现,它可能会返回S_FALSE。

RECONCILEF_RESUMEDRECONCILIATION

公文包协调器应使用提供的部分残留物恢复对帐。 如果没有此值,协调器应忽略任何输入版本中的任何“已考虑但拒绝”的信息。

RECONCILEF_YOUMAYDOTHEUPDATES

公文包协调器可以执行更新。 如果没有此值,协调器将无法执行更新。 如果协调成功完成,则协调程序在执行更新时应返回REC_S_IDIDTHEUPDATES;如果未执行更新,应返回S_OK。

hwndOwner

类型:HWND

要用作公文包协调程序创建的任何子窗口的父窗口的窗口的句柄。 仅当在 dwFlags 中指定了RECONCILEF_MAYBOTHERUSER时,此参数才有效。

hwndProgressFeedback

类型:HWND

发起方要显示的进度反馈窗口的句柄。 仅当在 dwFlags 中指定了RECONCILEF_FEEDBACKWINDOWVALID时,此参数才有效。 公文包协调器可以使用此窗口句柄调用 SetWindowText 函数,向用户显示其他对帐状态信息。

ulcInput

类型: ULONG

dwFlags 中指定的版本数或部分残渣数。 此参数不得为零。

rgpmkOtherInput

类型: IMoniker**

数组的地址,该数组包含要用于访问要协调的版本或部分残骸的名字对象的地址。

plOutIndex

类型: LONG*

接收索引值的变量的地址,该值指示对帐结果是否与初始版本之一相同。 如果对帐结果是两个或更多个版本的组合,则变量设置为 -1L。 否则,它是从零开始的索引,其中 0 表示此对象,1 表示第一个版本,2 表示第二个版本,依此类而论。

pstgNewResidues

类型: IStorage*

用于存储新残留物的 IStorage 接口的地址。 此参数可以为 NULL ,指示不应保存残渣。

pvReserved

类型: void*

保留;必须为 NULL

返回值

类型: HRESULT

返回以下值之一。

返回代码 说明
S_OK
已成功完成对帐,必须将更改传播到其他对象。
S_FALSE
未执行任何和解行动。 公文包协调器希望回退到发起程序的位复制实现。 仅当在 dwFlags 中设置了RECONCILEF_ONLYYOUWERECHANGED时,才能返回此值。
REC_S_IDIDTHEUPDATES
已成功完成对帐,并且 (实现 协调 方法的对象以及 rgpmkOtherInput) 描述的所有其他对象都已相应更新。 因此,发起方不需要进一步执行任何操作来传播更改。 如果协调返回此值,则 plOutIndex 指向的变量应设置为 -1L。 如果 协调 返回此值,则发起程序不会保存源对象的存储。 仅当在 dwFlags 中设置了RECONCILEF_YOUMAYDOTHEUPDATES时,才能返回此值。
REC_S_NOTCOMPLETE
公文包协调器完成了部分(但不是全部)对帐。 它可能需要用户交互。 更改不会传播到其他对象。
REC_S_NOTCOMPLETEBUTPROPAGATE
公文包协调器完成了部分(但不是全部)对帐。 它可能需要用户交互。 更改将传播到其他对象。
REC_E_NORESIDUES
公文包协调器不支持生成残留物,因此拒绝对残留物的请求。 对象的状态保持不变。
REC_E_ABORTED
公文包协调程序停止了对帐以响应发起程序的终止请求 (请参阅 SetAbortCallback 了解) 的详细信息。 未指定对象的状态。
REC_E_TOODIFFERENT
无法执行对帐,因为提供的文档版本过于不同。
REC_E_INEEDTODOTHEUPDATES
调用对象的 协调 实现时,未设置RECONCILEF_YOUMAYDOTHEUPDATES标志;此实现要求在 dwFlags 参数中设置此值。
OLE_E_NOTRUNNING
对象是一个 OLE 嵌入对象,必须先运行该对象,然后才能执行此操作。对象的状态保持不变。
E_UNEXPECTED
错误。

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 reconcil.h
DLL Shell32.dll (版本 4.0 或更高版本)

请参阅

IReconcilableObject