COM道理及应用—-统一数据传输
当前位置:以往代写 > C/C++ 教程 >COM道理及应用—-统一数据传输
2019-06-13

COM道理及应用—-统一数据传输

COM道理及应用—-统一数据传输

副标题#e#

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接口指针。


#p#副标题#e#

8、传递毗连机制

为了实现从数据工具到客户措施的通信进程,要求数据工具在状态产生变革时能主动通知客户措施,而客户措施必需提供一个吸收器工具以便吸收这些通知,这是曾在第六章中先容过的COM提供的通过吸收器工具成立的通用的双向通信机制。而在统一数据传输机制中利用的通知吸收器要简朴一些,它是由客户措施实现的内部工具,只需实现IAdviseSink接口。

数据工具与客户措施之间的毗连方法较第六章中的可毗连工具机制轻便得多。

客户措施通过IDataObject::DAdvise函数成立传递毗连时,它除了要提供吸收器工具的IAdciseSink接口指针,还要提供两个信息:名目信息和与传递毗连有关的符号信息。

COM提供了“数据传递节制器”(data advise holder)的内部工具,数据传递节制器工具实现了IDataAdviseHolder接口。数据工具操作COM API函数CreateDataAdviseHolder建设一个数据传递节制器工具,该函数返回工具的IDataAdviseHolder接口指针,然后,数据工具把IDataObject接口的三个与变革通知有关的成员函数直接委托给数据传递节制器工具IDataAdviseHolder接口的相应成员函数。

9、数据工具

#p#分页标题#e#

在实现数据工具时,不管是历程内组件措施,照旧历程外组件措施,由于与数据工具有关的接口都是COM界说的尺度接口,COM已经提供了这些接口的跨历程列集器,所以不消思量跨历程的细节。历程模子只影响机能因素。

10、通过剪贴板传输数据

在剪贴板与数据工具团结起来之前,Win32中为支持剪贴板操纵而提供了一组API函数:OpenClipboard、CloseClipboard、 EmptyClipboard、SetClipboardData、GetClipboardData、 IsClipboardFormatAvailable、EnumClipboardFormats。

因为剪贴板是Windows操纵系统支持的特性,而COM是与平台无关的组件工具模子类型,所以剪贴板和数据工具团结之后的特性不属于COM领域,严格来讲应该数OLE技能的一部门,称之为OLE剪贴板。OLE也提供了四个封装过的API函数:OleSetClipboard、 OleGetClipnoard、OleFlushClipboard、OleCurrentClipboard。

11、拖-放数据传输协议

与剪贴板传输协议差异,OLE的拖-放数据传输协议只能传输数据工具,而不能传输其他的数据。

拖-放操纵是一个与界面有关的数据传输进程,凡是涉及到源窗口和方针窗口。

OLE提供的API函数RegisterDragDrop把“放方针”工具与窗口接洽起来。

12、MFC对剪贴板和拖-放的支持

MFC提供了两个类用于支持数据工具,别离为COleDataSource和COleDataObject类。这两个类直接担任于CCmdTarget,个中COleDataSource类用于源措施一方,COleDataObject用于客户措施一方。

COleDataSource类实现了IDataObject接口,可是不支持传递毗连。COleDataSource类建设并打点了一组数据名目,这些数据名目被生存在工具内部(缓冲区中)。COleDataSource类实现了一个真正的COM工具,它有本身的引用计数。

    关键字:

在线提交作业