链接的对象和名字对象
链接的对象(如嵌入式对象)依赖于对象处理程序来与服务器应用程序通信。 但是,链接对象本身管理链接源的命名和跟踪。 链接对象的行为类似于进程内服务器。 例如,激活后,链接对象将查找并启动链接源的 OLE 服务器应用程序。
链接对象的处理程序由两个主要组件组成:处理程序组件和链接组件。 处理程序组件包含控制和远程处理片段和函数,就像嵌入对象的处理程序一样。 链接组件有自己的控制器和缓存,并提供对对象的结构化存储的访问权限。 链接组件控制器通过名字对象和绑定(查找和运行链接源的过程)支持源命名。 (有关名字对象和绑定的详细信息,请参阅 组件对象模型.)
当用户最初创建链接对象或从存储加载现有对象时,容器会将链接组件的实例加载到内存中,以及对象处理程序。 链接组件提供接口(尤其是 IOleLink),这些接口将对象标识为链接,并使它能够管理其链接源的命名、跟踪和更新。
通过实现 IOleLink 接口,链接对象为其容器提供支持链接的函数。 只有链接对象实现 IOleLink,并且通过查询此接口,容器可以确定给定对象是嵌入还是链接。 IOleLink 提供的最重要的函数使容器能够绑定到链接对象的源,即激活与存储链接对象的本机数据的文档的连接。 IOleLink 还定义了用于管理有关链接对象的信息的函数,例如缓存的演示文稿数据和链接源的位置。
保存包含链接对象的复合文档时,链接的数据将随链接源一起保存,而不是与容器一起保存。 仅保存有关其名称和位置的信息以及复合文档。 此行为与嵌入对象(其数据存储与其容器的数据)形成鲜明对比。
容器应用程序可以提供有关其嵌入对象的信息,以便后者或其部分可以充当链接源。 通过实现对链接到容器的嵌入对象的支持,可以进行嵌套嵌入,从而缓解用户必须跟踪需要链接的每个嵌入对象的原始内容。 例如,如果用户希望在Microsoft Word中嵌入Microsoft Excel工作表,并且工作表包含在 Paintbrush 中创建的位图,则用户可以链接到工作表中包含的位图副本,而不是原始位图的副本。
相关主题