反名字对象
OLE 提供了一种特殊类型的名字对象实现,被称为反名字对象。 在创建新的名字对象类时可以使用此名字对象。 可以将它用作其所组成的名字对象的逆函数,从而有效地取消该名字对象,这与文件系统命令中的“...”运算符向上移动目录级别的方式基本相同。
有必要提供反名字对象,因为创建复合名字对象后,就无法在对象移动等情况下删除名字对象的各个部分。 相反,可以使用反名字对象从复合名字对象中删除一个或多个条目。
反名字对象是显式用作逆函数的名字对象类。 COM 定义了名为 CreateAntiMoniker 的函数,该函数会返回一个反名字对象。 通常使用此函数来实现 IMoniker::Inverse 方法。
反名字对象只是那些将反名字对象当做逆函数的名字对象类型的逆函数。 例如,如果要删除复合名字对象的最后一部分,则不应创建反名字对象并将其组合到复合名字对象的末尾。 你无法确定复合名字对象的最后一部分会将反名字对象视为其逆函数。 相反,你应该在复合名字对象上调用 IMoniker::Enum,从而指定 FALSE 作为第一个参数。 这样会创建一个枚举器,它会按相反顺序返回组件名字对象。 使用枚举器检索复合名字对象的最后一部分,并在该名字对象上调用 Inverse。 你需要使用 Inverse 返回的名字对象来移除符合名字对象的最后一部分。