IMoniker::Reduce 方法 (objidl.h)

将名字对象减少为最简单的形式。

语法

HRESULT Reduce(
  [in]      IBindCtx *pbc,
  [in]      DWORD    dwReduceHowFar,
  [in, out] IMoniker **ppmkToLeft,
  [out]     IMoniker **ppmkReduced
);

参数

[in] pbc

指向绑定上下文上要用于此绑定操作的 IBindCtx 接口的指针。 绑定上下文缓存绑定过程中绑定的对象,包含使用绑定上下文应用于所有操作的参数,并提供名字对象实现应检索其环境的相关信息的方法。

[in] dwReduceHowFar

指定该名字对象应该简化的程度。 此参数必须是 MKRREDUCE 枚举中的值之一。

[in, out] ppmkToLeft

在条目中,指向 IMoniker 指针变量的指针,该变量包含指向此名字对象左侧的接口指针。 此参数主要由名字对象实现者用于启用复合名字对象的各个组件之间的合作:名字对象客户端通常可以传递 NULL

返回时,*ppmkToLeft 通常设置为 NULL,指示原始名字对象在左侧没有更改。 在极少数情况下,*ppmkToLeft 表示名字对象,指示应忽略左侧的上一个名字对象,并且通过 *ppmkToLeft 返回的名字对象是替换项。 在这种情况下,实现必须调用此名字对象左侧的“ 发布 ”,并且必须在新的返回名字对象上调用 AddRef :调用方以后必须释放它。 如果发生错误,则实现可以保留接口指针不变或将其设置为 NULL

[out] ppmkReduced

指向 IMoniker 指针变量的指针,该变量接收指向此名字对象形式减少的接口指针,如果发生错误,或者此名字对象已减少为无,则为 NULL 。 如果无法减少此名字对象,*ppmkReduced 只是设置为此名字对象,并且返回值MK_S_REDUCED_TO_SELF。 如果 *ppmkReduced 为非 NULL,则实现必须在新的名字对象上调用 AddRef ;调用方负责调用 发布。 (即使 *ppmkReduced 设置为此名字对象.) 也是如此

返回值

此方法可以返回标准返回值E_OUTOFMEMORY和E_UNEXPECTED,以及以下值。

返回代码 说明
S_OK
该方法已成功完成。
MK_S_REDUCED_TO_SELF
无法进一步减少此名字对象,因此 ppmkReduced 指示此名字对象。
MK_E_EXCEEDEDDEADLINE
无法在绑定上下文的 BIND_OPTS 结构指定的时间限制内完成该操作。

注解

此方法适用于以下用途:

  • 启用将用户定义的宏或别名构造为新类型的名字对象类。 减少时,将返回宏计算到的名字对象。
  • 启用一种名字对象的构造,用于跟踪数据在移动时的数据。 减少后,将返回其当前位置中的数据名字对象。
  • 在支持基于标识符的方法访问独立于文件名的文件的文件系统上;文件名字对象可减少到包含其中一个标识符的名字对象。
在 dwReduceHowFar 参数中传递的 MKRREDUCE 标志的意图是能够以编程方式将名字对象减少为可识别用户的表单。 例如,文件系统中的路径、字处理文档中的书签和电子表格中的范围名称均可供用户识别。 相比之下,封装在名字对象中的宏或别名对用户无法识别。

对呼叫者的说明

上述方案当前不是由系统提供的名字对象类实现的。

在使用 IMoniker::IsEqual 方法比较两个名字对象之前,应调用 Reduce,因为减少的名字对象采用最具体的形式。 IsEqual 可能会在减少两个名字对象之前返回S_FALSE,并在减少名字后返回S_OK。

实现者的注释

如果当前名字对象可以减少,则实现不得减少就地名字对象。 相反,它必须返回一个新的名字对象,表示当前名称的减少状态。 这样,调用方仍可以选择使用非引发的名字对象 (,例如枚举其组件) 。 你的实现至少应减少名字对象,只要请求。

特定于实现的说明

实现 备注
反名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
类名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
文件名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
泛型复合名字对象 此方法以递归方式调用每个组件名字对象的 Reduce 。 如果任一组件自行减少,该方法将返回S_OK,并传回已减少组件的复合。 如果未发生减少,该方法将传回同一名字对象并返回MK_S_REDUCED_TO_SELF。
项名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
OBJREF 名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
指针名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。
URL 名字对象 此方法返回MK_S_REDUCED_TO_SELF并传回同一名字对象。

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IMoniker