IMoniker::Inverse 方法 (objidl.h)

创建一个名字对象,该名字对象是此名字对象的反数。 在此名字对象或类似结构之一的右侧组合时,名字对象将一无所获。

语法

HRESULT Inverse(
  [out] IMoniker **ppmk
);

参数

[out] ppmk

IMoniker 指针变量的地址,该变量接收指向此名字对象反转的名称对象的接口指针。 成功后,实现必须对新的反名字对象调用 AddRef 。 调用方负责调用 Release。 如果发生错误,实现应将 *ppmk 设置为 NULL

返回值

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

返回代码 说明
S_OK
已成功返回反名字对象。
MK_E_NOINVERSE
名字对象类没有反转。

注解

名字对象的反向类似于 MS-DOS 文件系统中的“..”目录;“..”目录充当任何其他目录名称的反转,因为将“..”追加到目录名称会导致空路径。 同样,名字对象的反对象通常也是同一类中所有名字对象的反数。 但是,它不一定是不同类的名字对象的反数。

复合名字对象的反数是由原始名字对象的组件的逆数组成的复合对象,按相反顺序排列。 例如,如果 A 的反数为 Inv ( A ) 而 A、B 和 C 的复合为 Comp ( A、B、C ) ,则

Inv ( Comp ( A、B、C ) ) 等于 Comp ( Inv ( C ) 、Inv ( B ) 、Inv ( A ) ) 。

并非所有名字对象都有反数。 大多数本身是反名字对象(例如反名字对象)没有反向。 没有反向的名字对象不能具有从它们标识到外部其他对象的对象内部形成的相对名字对象。

给调用方的说明

使用名字对象定位另一个对象的对象通常不知道它正在使用的名称对象的类。 若要获取名字对象的反数,应始终调用 IMoniker::Inverse 而不是 CreateAntiMoniker 函数,因为无法确定所使用的名字对象是否将反名字对象视为反名字对象。

Inverse 方法也由 IMoniker::RelativePathTo 方法的实现调用,以帮助构造相对名字对象。

实施者说明

如果名字对象没有内部结构,则可以在 中调用 CreateAntiMoniker 函数,以在 IMoniker::Inverse 的实现中获取反名字对象。 在 IMoniker::ComposeWith 的实现中,需要为 Inverse 实现中提供的逆检查。

特定于实现的注释

实现 备注
反名字对象 此方法返回MK_E_NOINVERSE并将 *ppmk 设置为 NULL
类名字对象 此方法返回反名字对象 (即调用 CreateAntiMoniker 的结果) 。
文件名字对象 此方法返回反名字对象 (即调用 CreateAntiMoniker 的结果) 。
泛型复合名字对象 此方法返回一个复合名字对象,该名字对象由原始复合的每个组件的反数组成,按相反顺序存储。 例如,如果 A 的反数为 Inv ( A ) ,则 A、B 和 C 的组合的反数为 Comp (Inv ( C ) 、Inv ( B ) 、Inv ( A ) ) 。
项名字对象 此方法返回反名字对象 (即调用 CreateAntiMoniker 的结果) 。
OBJREF 名字对象 此方法返回反名字对象 (即调用 CreateAntiMoniker 的结果) 。
指针名字对象 此方法返回反名字对象 (即调用 CreateAntiMoniker 的结果) 。
URL 名字对象 此方法返回MK_E_NOINVERSE并将 *ppmk 设置为 NULL

要求

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

另请参阅

CreateAntiMoniker

IMoniker