项名字对象

另一个 OLE 实现的名字对象类是 项名字对象,可用于标识另一个对象中包含的对象。 一种类型的包含对象是嵌入在复合文档中的 OLE 对象。 复合文档可以通过为每个对象分配任意名称来标识它所包含的嵌入对象,例如“embedobj1”、“embedobj2”等。 另一种类型的包含对象是文档中的用户选择,例如电子表格中的单元格区域或文本文档中的字符区域。 由选定内容组成的对象称为 伪对象,因为在用户标记所选内容之前,该对象不会被视为非重复对象。 电子表格可能使用名称(如“1A:7F”)标识单元格区域,而字处理文档可能会使用书签的名称标识字符范围。

项名字对象主要用于连接或 组合,另一个名字对象,用于标识容器。 通常创建项目名字对象,然后将其组合到文件名字对象上,以创建对象的完整路径的等效项。 例如,可以使用项名字对象“embedobj1”(标识容器对象)撰写文件名字对象“c:\work\report.doc”(它标识容器中的对象),以形成名字对象“c:\work\report.doc\embedobj1”,该对象唯一标识特定文件中的特定对象。 还可以连接其他项名字对象来标识深度嵌套的对象。 例如,如果“embedobj1”是电子表格对象的名称,若要标识该电子表格对象中的某个单元格区域,则可以追加另一个项目名字对象来创建一个名字对象,该名字对象将等效于“c:\work\report.doc\embedobj1\1A:7F”。

与文件名字对象结合使用时,项名字对象将形成完整的路径。 因此,项名字对象将路径名称的概念扩展到文件系统之外,定义路径名称以标识单个对象,而不仅仅是文件。

项名字对象和文件名字对象之间存在显著差异。 文件名字对象中包含的路径对于任何了解文件系统的人都有意义,而项名字对象中包含的部分路径仅对特定容器有意义。 每个人都知道什么是“c:\work\report.doc”指的是,但只有一个特定的容器对象知道什么是“1A:7F” 引用。 一个容器无法解释由另一个应用程序创建的项名字对象;唯一知道哪个对象由项名字对象引用的容器是首先将项名字对象分配给对象的容器。 因此,由文件和项名字对象组合命名的对象源不仅必须实现 IPersistFile,以方便绑定文件名字对象,而且还 IOleItemContainer,以便将项名字对象的名称解析为适当的对象,在文件的上下文中。

名字对象的优点是,使用名字对象查找对象的人无需了解项名字对象中包含的名称,只要项名字对象是复合项的一部分。 通常,项目名字对象本身就没有意义了。 而是将项名字对象撰写到文件名字对象上。 然后,在复合上调用 IMoniker::BindToObject,该组合绑定了其中的各个名字对象,并解释名称。

若要创建项名字对象并返回其指向名字对象提供程序的指针,OLE 提供帮助程序函数 CreateItemMoniker。 此函数创建项名字对象并返回其指向提供程序的指针。

反名字对象

类名字对象

复合名字对象

文件名字对象

指针名字对象