项名字对象

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

项名字对象主要用于连接或 组合与另一个标识容器的名称。 通常创建项目名字对象,然后组合到 (,例如,) 文件名字对象来创建与对象的完整路径等效。 例如,可以编写文件名字对象“c:\work\report.doc” (,该名称标识容器对象) 项名字对象“embedobj1” (,该对象标识容器中的对象) 以形成名字对象“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。 此函数创建项名字对象并返回其指向提供程序的指针。

反名字对象

类名字对象

复合名字对象

文件名字对象

指针名字对象