复合文档

OLE 复合文档允许用户在单个应用程序中工作,以各种格式处理写入的数据,并从多个源派生。 例如,用户可以插入到字处理文档中,该文档是在第二个应用程序中创建的图形,以及第三个应用程序中创建的声音对象。 激活图形会导致第二个应用程序加载其用户界面,或者至少包含编辑对象所需的工具的部分。 激活声音对象会导致第三个应用程序播放它。 在这两种情况下,用户都可以从单个文档的上下文中作来自外部源的数据。

OLE 复合文档技术的基础是 COM、结构化存储和统一数据传输。 如下所述,这些核心技术在 OLE 复合文档中起着关键作用:

COM

复合文档对象本质上是可以嵌入或链接到现有文档的 COM 对象。 作为 COM 对象,复合文档对象公开 IUnknown 接口,客户端可以通过该接口获取指向其其他接口的指针,包括多个接口,例如 IOleObjectIOleLink,以及 IViewObject2,这些接口提供复合文档对象特有的特殊功能。

结构化存储

复合文档对象必须实现 IPersistStorage,或者(可选)IPersistStream 接口来管理自己的存储。 用于创建复合文档的容器必须提供 IStorage 接口,对象通过该接口存储和检索数据。 容器几乎总是提供从 OLE 的复合文件实现中获得的 IStorage 实例。 容器还必须使用对象的 IPersistStorage 和/或 IPersistStream 接口。

统一数据传输

支持复合文档的应用程序必须实现 IDataObject,因为嵌入式对象和链接对象以使用特殊 OLE 剪贴板格式传输的数据开始,而不是标准Microsoft Windows 剪贴板格式。 换句话说,将数据格式化为嵌入对象或链接对象只是 OLE 统一数据传输模型提供的另外一个选项。

OLE 的复合文档技术有利于软件开发人员和用户。 软件开发人员现在没有义务将每个可想象的功能塞进一个应用程序,而是现在免费开发依赖于其他应用程序提供其他功能的较小、更集中的应用程序。 如果软件开发人员决定为应用程序提供其核心功能以外的功能,开发人员可以将这些附加服务作为单独的 DLL 实现,这些 DLL 仅在需要其服务时才加载到内存中。 用户受益于更小、更快、功能更强的软件,这些软件可以根据需要混合和匹配,从而从单个主文档内作所有必需的组件。

有关详细信息,请参阅以下主题:

数据传输

结构化存储