1、概述
COM提供了应用之间数据交换的标准方案,称为统一数据传输(UDT,uniform data transfer)。统一数据传输技术建立在结构化存储技术的基础之上,它通过一个“数据对象”来表达要传输的数据信息,因此,统一数据传输技术的核心在于数据对象的定义和实现。剪贴板和拖-放是统一数据传输的两个典型应用。
2、数据交换标准
早期的OLE1.0版本使用DDE(Dynamic Data Exchange,动态数据交换)作为数据交换标准,但DDE使用的格式比较简单,并且只能用全局内存作为传输介质,所以传输的效率和功能都受限制。OLE2.0版本引入了COM作为其基本的结构模型,使用COM提供的统一数据传输作为其数据交换机制,可直接在不同介质之间进行传输。
3、数据交换与传输协议的分离
在不同应用之间进行数据传输操作包括两方面的内容,首先是数据格式的统一,其次是传输协议的建立。
以前采用DDE方式只能使用简单的数据结构对信息进行描述,COM的统一数据传输机制使用“数据对象”作为信息实体,数据对象通过IDataObject 接口暴露其内部信息。由于数据对象本身是一个COM对象,因此它不仅可以表达一般的结构化信息,也可以表达一些非结构化信息,甚至是动态信息。IDataObject接口为应用程序进行数据传输建立了标准。在Windows平台上,最基本的传输协议为剪贴板、拖-放,应用程序通常利用这两种协议获得数据对象。
在统一数据机制引入到Windows系统之前,Windows提供了许多API函数以及预定义的消息用于应用之间传输数据的桥梁。这些API函数把传输协议和传输数据信息绑在一起,比如用于处理剪贴板数据传送的一组函数:GetClipboardData、SetClipboardData和 CloseClipboard等,而DDE则通过发送消息作为数据传送的手段。
COM提供的统一数据传输机制可很好地避免Windows API函数的数据传输的限制,一方面它定义了两个数据结构FORMATETC和STGMEDIUM,分别用来描述数据格式和存储介质,使新的机制可适应更广泛的数据类型和存储介质;另一方面它为数据对象提供了“数据表化通知”的机制。
数据对象的概念使统一数据传输机制不仅可用于应用之间传输数据,也可以成为组件程序之间的信息交换标准。
4、剪贴板
剪贴板是一个全系统共享的数据缓冲区,每个应用都可以通过系统提供的API函数访问剪贴板。它的三个标准操作是:剪切、复制、粘贴。
Windows系统在引入COM的统一数据传输机制之前,提供了一组API函数以及预定义的CF_***标准格式,这些格式包括文本类型、位图类型、图元文件(metafile)数据等,而且这些数据必须存放在全局内存中。但剪贴板技术与数据对象结合之后,情况有了很大的变化,可用于传输数据对象,比如 OLE文档对象、ActiveX控制对象等,或者是应用程序中自定义的数据对象,只要此对象实现IDataObject接口即可。剪贴板成为数据对象的提供方和接收方之间的通信协议,而且这种通信方式是异步进行的。
5、拖-放
拖-放技术也是基本的传输协议,它的使用方式与剪贴板有所不同,程序采用同步的方式进行。
6、数据结构FORMATETC和STGMEDIUM
FORMATETC结构定义了用于传输的数据格式,它扩充了基本的剪贴板数据格式;STGMEDIUM结构定义了用于传输的介质类型,它即可以描述常用的全局内存,也可以描述其他的存储介质。
7、数据对象和IDataObject接口
统一数据传输中的数据对象是一个COM对象,它实现了IDataObject接口。在数据对象的实现方(即提供方)和客户(即接收方)之间,IDataObject接口为两者建立了标准,而各种传输协议如剪贴板和拖-放等,它们所传递的实际上是IDataObject接口指针。