COM, OLE技术概述

来源:互联网 发布:淘宝网斯凯奇女鞋 编辑:程序博客网 时间:2024/05/18 10:22
COM    
         COM即组件对象模型,是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互 。在COM标准中,一个组件程序也被称为一个模块,它可以是一个动态连接库 ,称作进程内组件也可以是一个可执行程序 ,称作进程外组件。一个组件程序可以包含一个或多个组件对象。COM对象不同于一般的面向对象语言中的对象概念,COM对象是建立在二进制可执行代码级的基础上,而 C++等语言中的对象是建立在源代码级基础上的,因此 COM对象是语言无关的。这一特性使得用不同编程语言开发的组件对象进行交互成为可能。
        在COM模型中,对象本身对于客户来说是不可见的,客户请求服务时,只能通过接口进行。接口是COM对象与客户进行联系的唯一通道。OPC技术实现及应用一个COM对象可以支持多个接口,通过这些接口将功能暴露出去,只要接口没有发生变化,即使 COM对象内部发生变化,客户程序也无须改变 。
         COM程序的对象和客户之间的相互作用是建立在客户/服务器模型的基础上的,客户/服务器模型的优点是稳定性好,而稳定性正是COM模型的目标,尤其对于跨进程的程序通讯 ,稳定性更会带来性能上的高可靠性。COM不仅仅是一种简单的客户/服务器模型,有时客户反过来也提供服务,在这种情况下,一个对象可能既是服务器也可以是客户。COM能够有效地处理这种情况。COM库提供了一些核心的系统级代码,这些代码使得 COM对象和客户之间可以通过接口在二进制代码级进行交互 。COM库可以保证所有的组件按照统一的方式进行交互操作,它使得在编写 COM应用时,可以不必编写为进行 COM通讯而必须的大量基础代码。从而大大提高了开发速度 。COM的高级特性包括可连接对象,结构化存储,命名和绑定,统一数据传输,分布式C0M等,这些特性使COM规范具有更强的生命力 。Microsoft不仅定义了COM规范,而且也提供了具体的实现,在windows系统平台上,COM技术被应用于系统的各个层次 ,从底层的COM对象管理到上层的应用程序交互都用到了COM技术。
OLE
       OLE(object linking and embedding)技术,即对象链接和嵌入技术,是一种在不同Windows应用程序之间共享数据的方法,它提供了比剪切一粘贴功能更强大,更标准化的共享数据方法。OPE1. 0旨在创建复合文档,而OLE2. 0则超出了复合文档的范围,提供了更具综合性的对象模型,该模型与编程接口相联系,使不同的应用程序之间能够交互和相互操作。OLE技术以COM规范为基础,充分发挥了COM标准的优势,使Windows操作系统上的应用程序具有极强的可交互性。COM+是COM的新发展,它以COM为基础,是COM, DCOM, MTS的集成。COM+把组件软件提升到应用层,通过操作系统的各种支持,把所有组件的底层细节留给操作系统。
ATL
        自从1993年Microsoft首次公布COM技术以后,Windows平台上的开发模式发生了巨大的变化,以 COM为基础的一系列软件组件化技术将 Windows编程带入了组件化时代。广大的开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度 和烦琐的细节也感 到极其的不便 。COM编程一度被视为一种高不可攀的技术,OPC技术实现及应用令人望而却步 。开发人员希望能够有一种方便快捷的COM开发工具,提高开发效率,更好地利用这项技术。在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK直接开发 COM组件,另一种方式是通过MFC提供的COM支持来实现。
         直接使用COM SDK开发COM组件是最基本也是最灵活的方式。通过使用 Microsoft提供 的开发包 ,我们可 以直接编写 COM程序 。但是 这种开发方式的难度和工作量都很大,一方面要求开发者对于COM的技术原理具有比较深入的了解 (虽然对技术本身的深刻理解对使用任何一种工具都是非常有益 的,但对于COM这样一整套复杂的技术而言,在短时间内完全掌握是很难的,另一方面,直接使用 COM SDK要求开发人员自己去实现 COM应用的每一个细节,完成大量的重复性工作。这样做的结果是,不仅降低了工作效率,同时也使开发人员不得不把许多精力投入到 与应用需求本身无关的技术细节中。虽然这种开发方式对于某些特殊的应用很有必要,但这种编程方式并不符合组件化程序设计方法所倡导的可重用性,因此,直接采用COM SDK不是一种理想的开发方式 。
        使用MFC提供的COM支持开发 COM应用可以说在使用COM SDK基础上提高了自动化程度,缩短了开发时间.MFC采用面向对象的方式将COM的基本功能封 装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功 能。为了使派生类方便地获得COM对象的各种特性 ,MFC中有许多预定义宏,这些宏的功能主要是实现 CON接口的定义和对象的注册等通 常在 COM对象中要用到的功能.开发者可以使用这些宏来定制COM对象的特性 。
         另外,在MFC中还提供对Automation和ActiveX Control的支持,对于这两个方面,Visual C++也提供了相应的AppWizard和ClassWizard支持,这种可视化的工具更加方便了COM应用的开发。
         MFC对COM和OLE的支持确实比手工编写 COM程序有了很大的进步.但是 MFC对 COM的支持是不够完善和彻底的,例如对COM接口定义的IDL语言,MFC并没有任何支持,此外对于近些年来 COM和 ActiveX技术的新发展 MFC也没有提供灵活的支持。这是由 MFC设计的基本出发点决定的。MFC被设计成对Windows平台编程开发的面向对象的封装,自然要涉及 Windows编程的方方面面,COM作为 Windows平台编程开发的一个部分也得到 MFC的支持,但是MFC对COM的支持是以其全局目标为出发点的, 因此对COM的支持必然要服从其全局目标 。从这个方面而言,MFC对COM的支持不能很好的满足开发者的要求 。
         随着 Internet技术的发展,Microsoft将 ActiveX技术作为其网络战略的一个重要组成部分大力推广,然而使用MFC开发的ActiveX Control,代码冗余量大,而且必须要依赖于MFC的运行时刻库才能正确地运行。虽然 MFC的运行时刻库只有部分功能与COM有关,但是由于MFC的继承实现的本质 ,ActiveX Control必须背负运行时刻库这个沉重的包袱 。如果采用静态连接MFC运行时刻库的方式 ,这将使ActiveX 。
        OPC客户程序与一般的COM客户程序没有多大的区别,只是在创建OPC服务器后,按照一定的步骤调用相关的OPC接口函数实现与OPC服务器数据的连接,对于需要异步数据交换的客户程序,还要实现连接点的出接口,并调用相关的函数建立连接。
原创粉丝点击