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 返回的名字对象是替换项。 在这种情况下,实现必须在此名字对象左侧的旧名字对象上调用 Release ,并且必须对新的返回名字对象调用 AddRef ;调用方稍后必须释放它。 如果发生错误,实现可以保留接口指针不变,或将其设置为 NULL。
[out] ppmkReduced
指向 IMoniker 指针变量的指针,该变量接收指向此名字对象的简化形式的接口指针,如果发生错误或将此名字对象还原为无对象,则该指针可为 NULL 。 如果无法减少此名字对象,则*ppmkReduced 只需设置为此名字对象,返回值MK_S_REDUCED_TO_SELF。 如果 *ppmkReduced 为非 NULL,则实现必须在新的名字对象上调用 AddRef ;调用方负责调用 Release。 (即使 *ppmkReduced 设置为此名字对象,也是如此。)
返回值
此方法可以返回E_OUTOFMEMORY和E_UNEXPECTED的标准返回值,以及以下值。
返回代码 | 说明 |
---|---|
|
该方法已成功完成。 |
|
无法进一步减少此名字对象,因此 ppmkReduced 指示此名字对象。 |
|
无法在绑定上下文的 BIND_OPTS 结构指定的时间限制内完成操作。 |
注解
此方法适用于以下用途:
- 启用将用户定义的宏或别名构造为新类型的名字对象类。 减少时,将返回宏计算到的名称对象。
- 启用一种名字对象的构造,以便在数据移动时跟踪数据。 减少时,将返回其当前位置的数据的名称对象。
- 在支持基于标识符的方法来访问独立于文件名的文件的文件系统上;文件名字对象可以缩减为包含其中一个标识符的名称对象。
给调用方的说明
上述方案当前不是由系统提供的名字对象类实现的。在使用 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 |