复合文档

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

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

COM

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

结构化存储

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

统一数据传输

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

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

有关详情,请参阅以下主题:

数据传输

结构化存储