复合文档
OLE 复合文档允许用户在单个应用程序中工作,以各种格式处理写入的数据,并从多个源派生。 例如,用户可以插入到字处理文档中,该文档是在第二个应用程序中创建的图形,以及第三个应用程序中创建的声音对象。 激活图形会导致第二个应用程序加载其用户界面,或者至少包含编辑对象所需的工具的部分。 激活声音对象会导致第三个应用程序播放它。 在这两种情况下,用户都可以从单个文档的上下文中作来自外部源的数据。
OLE 复合文档技术的基础是 COM、结构化存储和统一数据传输。 如下所述,这些核心技术在 OLE 复合文档中起着关键作用:
-
COM
-
复合文档对象本质上是可以嵌入或链接到现有文档的 COM 对象。 作为 COM 对象,复合文档对象公开 IUnknown 接口,客户端可以通过该接口获取指向其其他接口的指针,包括多个接口,例如 IOleObject、IOleLink,以及 IViewObject2,这些接口提供复合文档对象特有的特殊功能。
-
结构化存储
-
复合文档对象必须实现 IPersistStorage,或者(可选)IPersistStream 接口来管理自己的存储。 用于创建复合文档的容器必须提供 IStorage 接口,对象通过该接口存储和检索数据。 容器几乎总是提供从 OLE 的复合文件实现中获得的 IStorage 实例。 容器还必须使用对象的 IPersistStorage 和/或 IPersistStream 接口。
-
统一数据传输
-
支持复合文档的应用程序必须实现 IDataObject,因为嵌入式对象和链接对象以使用特殊 OLE 剪贴板格式传输的数据开始,而不是标准Microsoft Windows 剪贴板格式。 换句话说,将数据格式化为嵌入对象或链接对象只是 OLE 统一数据传输模型提供的另外一个选项。
OLE 的复合文档技术有利于软件开发人员和用户。 软件开发人员现在没有义务将每个可想象的功能塞进一个应用程序,而是现在免费开发依赖于其他应用程序提供其他功能的较小、更集中的应用程序。 如果软件开发人员决定为应用程序提供其核心功能以外的功能,开发人员可以将这些附加服务作为单独的 DLL 实现,这些 DLL 仅在需要其服务时才加载到内存中。 用户受益于更小、更快、功能更强的软件,这些软件可以根据需要混合和匹配,从而从单个主文档内作所有必需的组件。
有关详细信息,请参阅以下主题:
- 容器和服务器
- 链接和嵌入
- 对象处理程序
- In-Process 服务器
- 链接的对象和名字对象
- 通知
- 复合文档接口
- 对象状态
- 实现 In-Place 激活
- 从现有数据 创建链接对象和嵌入对象
- 视图缓存
相关主题