`

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

    博客分类:
  • COM
阅读更多

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

 

8、通报连接机制

       为了实现从数据对象到客户程序的通信过程,要求数据对象在状态发生变化时能主动通知客户程序,而客户程序必须提供一个接收器对象以便接收这些通知,这是曾在第六章中介绍过的COM提供的通过接收器对象建立的通用的双向通信机制。而在统一数据传输机制中使用的通知接收器要简单一些,它是由客户程序实现的内部对象,只需实现IAdviseSink接口。

       数据对象与客户程序之间的连接方式较第六章中的可连接对象机制简便得多。


       客户程序通过IDataObject::DAdvise函数建立通报连接时,它除了要提供接收器对象的IAdciseSink接口指针,还要提供两个信息:格式信息和与通报连接有关的标志信息。

       COM提供了“数据通报控制器”(data advise holder)的内部对象,数据通报控制器对象实现了IDataAdviseHolder接口。数据对象利用COM API函数CreateDataAdviseHolder创建一个数据通报控制器对象,该函数返回对象的IDataAdviseHolder接口指针,然后,数据对象把IDataObject接口的三个与变化通知有关的成员函数直接委托给数据通报控制器对象IDataAdviseHolder接口的相应成员函数。

 

9、数据对象

       在实现数据对象时,不管是进程内组件程序,还是进程外组件程序,由于与数据对象有关的接口都是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对象,它有自己的引用计数。

分享到:
评论

相关推荐

    网络安全原理与应用:Web应用安全简介.pptx

    统一管理Web应用的数据,提供数据操作服务。 渲染显示网页文件,与用户完成交互操作。 守护进程和服务,接受http请求,返回http响应。 高性能计算机,运行web应用程序,提供网页服务。 传输web网页数据和内容 Web...

    Tcp-ip原理

    第二章 数据传输 10 寻址、路由选择和多路复用 11 INTERNET的路由结构 13 路由器 14 路由表(ROUTING TABLE) 14 地址转换 15 协议、端口和软插口 15 TCP/IP协议有一些重要的特点,以确保在特定的时刻能满足...

    自考:数据库系统原理-(考点).doc

    与其他软件的网络通信功能、不同数据库管理系统之间的数据传输以及相互访问功 能等 3.什么是并发控制 并发控制是指当多个用户的并发进程同时存取、修改数据库时,可能会发生相互干扰 而得到错误结果,并使得数据库的...

    微型计算机应用系统设计案例.pptx

    各级之间通过数据传输总线及网络相互连接起来。系统中的过程控制级完成过程的检测任务。控制管理级通过协调过程控制器工作,实现生产过程的动态优化。生产管理级完成制定生产计划和工艺流程以及对产品、人员、财务...

    网络原理复习题

    答:端口的作用是对TCP/IP体系的应用进程进行统一的标志,使运行不同操作系统的计算机的应用进程能够互相通信。 端口号只具有本地意义,它只是为了标志本地计算机应用层中的各个进程在和运输层交互时的层间接口。 2...

    VoIP核心技术及市场应用

    随着Internet的深入应用与发展,各类新技术层出不穷,ISP、ICP、ASP等网络公司不断涌现,推动着数据业务持续快速增长,可望在最近几年达到和超过话音业务。IP将成为未来信息通信的主导技术,各种业务可由IP包来承载...

    微机原理与接口技术试题及答案

    三套微机原理与接口技术的试题及答案 得分 评阅人 1.RESET信号到来后8088/86的CS和IP 分别为 _FFFF_H 和_0000_H。 2. 在特殊全嵌套方式下,8259可响应 同级或高级 中断请求。 3. CPU与外设接口通过¬ 数据 总线...

    数据中心的网络安全建设及举例.docx

    网络是数据传输的载体,数据中心网络安全建设一般要考虑以下三个方面: 数据中心的网络安全建设及举例全文共5页,当前为第2页。 数据中心的网络安全建设及举例全文共5页,当前为第2页。 合理规划网络的安全区域以及...

    RFC中文文档-txt

    RFC877 IP 数据包通过公共数据网络的传输标准 RFC888 STUB Exterior Gateway Protocol RFC890 外部网关协议执行表 RFC894 IP 数据包通过以太网网络传输标准 RFC895 IP 数据包通过试验性以太网网络的传输标准 RFC896 ...

    2017最新大数据架构师精英课程

    132_重写区域观察者的postPut和postScannext方法实现数据统一处理0 H) Q' Z- b; P# K 133_hbase的bulkload命令实现hbase集群之间数据的传输2 D6 d; F6 S8 x+ I/ I0 B0 @ 134_hive同hbase集成,统计hbase数据表信息% ...

    x-scan-v3.3-cn

    只要漏洞被发现,网络安全组织即会为漏洞命名,因此漏洞名称对应的文件在相当广泛的范围内都是统一的,只要知道了漏洞的名称,黑客就可以通过专门的漏洞搜索引擎进行查找,并且学习到与找到漏洞相关的详细信息。...

    计算机网络&计算机网络

    2.2.3 信道的最大数据传输率 2.3 传输介质 2.3.1 双绞线 2.3.2 同轴电缆 2.3.3 光纤 2.3.4 无线介质 2.4 多路复用 2.4.1 频分多路复用 2.4.2 波分多路复用 2.4.3 时分多路复用 2.5 数据交换技术 2.5.1 ...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    matlab文件如何查看程序代码-lsl_archived:本地网络上的多模式时间同步数据传输

    在库顶部构建的一套工具,包括,,和应用程序,这些工具可以从实验室网络上的一系列可用数据中获取数据(例如,音频,EEG或运动捕捉)。 这里有关于LSL的介绍性讲座/演示:(这是基于EEG的脑机接口在线课程的一部分...

    2005-2009软件设计师历年真题

     • 排列组合、概率论应用、应用统计(数据的统计分析)  • 运算基本方法(预测与决策、线性规划、网络图、模拟)  1.5 常用数据结构  • 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环...

    大一计算机应用基础习题与答案.doc

    计算机应用基础习题答案 第1章习题答案 一、简答题 1、计算机的发展已经历了几代?每代的特点是什么? 答:电子计算机的发展已经历了四代,正向第五发展。第一代电子计算机的特点是 :硬 件电子逻辑元件为电子管,...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    矿井钻孔救援通信技术的研究进展及趋势

    阐述了矿井钻孔救援通信技术原理,详细介绍了钻孔救援通信技术即钻孔救援探测技术、矿井救援指挥系统及可视化技术、钻孔救援高速传输及交换技术的国内外研究进展,指出了矿井救援通信技术亟需解决的问题及发展趋势:钻...

Global site tag (gtag.js) - Google Analytics