项名字对象

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

项名字对象主要用于与另一个名字对象(用于标识容器的名字对象)进行连接或 组合。 通常会创建项名字对象,然后将其组合到 (例如) 文件名字对象,以创建对象的完整路径等效项。 例如,你可以编写文件名字对象 "c: \ work \report.doc" (,该文件标识) 具有项名字对象 "embedobj1" 的容器对象 (,该对象标识容器中的对象) 以构成名字对象 "c: \ work \report.docembedobj1",该名字对象 \ 唯一标识特定文件中的特定对象。 你还可以连接其他项名字对象来标识深度嵌套的对象。 例如,如果 "embedobj1" 是电子表格对象的名称,则若要标识该电子表格对象中一定范围的单元格,可以追加另一个 item 名字对象来创建一个名字对象,该名字对象等效于 "c: \ work \report.doc\ Embedobj1 \ 1a: 7F"。

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

项名字对象和文件名字对象之间存在很大的差异。 文件名字对象中包含的路径对于了解文件系统的任何人都是有意义的,而项名字对象中包含的部分路径只对特定容器有意义。 所有人都知道 "c: \ 工作 \report.doc" 引用的内容,但只有一个特定容器对象知道 "1A: 7F" 引用的内容。 一个容器无法解释另一个应用程序创建的项名字对象;唯一知道项名字对象所引用的对象的容器是第一个位置中分配有项名字对象的容器。 出于此原因,由文件和项名字对象的组合所命名的对象源不得实现 IPersistFile,从而有助于绑定文件标记,还可以在文件的上下文中 IOleItemContainer 帮助解析项名字对象的名称。

名字对象的优点是:使用名字对象查找对象的人无需了解项名字对象中包含的名称,前提是该项名字对象是复合的一部分。 通常,项名字对象在其自身上存在是有意义的。 相反,会将项名字对象组合到文件标记上。 然后,在复合中调用 IMoniker:: BindToObject ,这会将其中的各个名字对象绑定在一起,从而解释名称。

若要创建项名字对象对象并将其指针返回给名字对象提供程序,OLE 提供了 helper 函数 CreateItemMoniker。 此函数创建项名字对象对象并将其指针返回到提供程序。

反名字对象

类名字对象

复合名字对象

文件名字对象

指针名字对象