COM学习笔记(一)

来源:互联网 发布:怎么做数据新闻 编辑:程序博客网 时间:2024/05/22 16:03
 Internet 的飞速发展,面向对象的思想很难适应这种分布式软件模型,于是组件化设计思想得到了迅速发展。复杂的应用程序被设计成小的,功能单一的组件模块,这些模块可以运行在同一台机器上,也可以在不同的机器上。组件程序和组件程序之间需要一些极为细致的规范,只有组件程序遵守了同一规范,软件系统才能正常运行。所以OMG和Microsoft分别提出了COBRA和COM标准。

COM是什么?

一个组件程序被称为一个模块,可以是DLL,进程内组件,也可以是一个EXE,进程外组件。一个组件程序可以包含一个或多个组件对象,因为COM是以对象为基本单元的模型。

COM对象是建立在二进制可执行的代码级别的基础上的,而C++等语言中的对象是建立在源代码级别基础上的。所以COM是跟语言无关的。

从底层的COM对象管理到上层上的应用程序交互都要用到COM标准。各种层次上的COM技术应用都为我们提供了很好的范例。

COM带给大家的不仅仅是一项技术,更是一种软件结构的实现。COM为我们提供了程序互连的基础,程序之间的通信有了统一的标准,而且这种通信可以从桌面环境扩展到网络环境,甚至是异构网络。

 

第一部分  COM原理

概述、COM对象和接口、COM的实现、COM特性、用VC++开发COM应用

随着网络技术的发展,COM表现出极强的适应能力,COM得到了展示,通称为ActiveX技术。

用COM进行软件架构是一种理想的解决方案。

 

OLE发展历史

在OLE中,组件程序和客户程序之间进行通信,并没有使用COM规范,而是使用的是DDE(动态数据交互),它是建立在消息机制基础上的,最大的缺点就是效率低下。

软件的升级,每一个底层的模块都可以单独进行升级,在软件原来的软件模块的基础上,可以添加新的组件模块而不需要改变原来的组件模块。

 

组件的产生

单体应用程序

一个设计良好的应用系统往往被切分成一些组件(当然要符合系统的应用逻辑和业务要求),这些组件可以单独开发,单独编译,甚至可以单独进行调试和测试。然后再把它组合到一起,就是完整的软件系统了。

这种组件化程序设计技术,不同于传统的结构化程序设计技术,也不同于现在被广泛采用的面向对象程序设计技术。它更注重的是应用系统的全局,要求从应用系统的全方位进行考察;当然具体到某一块组件或者模块的时候,还是需要结构化程序和面向对象程序设计技术作为基础。

组件软件和软件组件的区别

 

面向对象的组件模型 COM

组件之间的接口是软件通信的关键,因为接口是双方通信的基础。

在COM标准中,对象是一个非常活跃的元素,我们也经常把它称为COM对象。

组件模块为COM对象提供了活动的空间。

COM对象以接口的方式提供服务,我们把这种接口称为COM接口。

当应用程序或者普通程序调用组件的功能时候,它首先要创建一个COM对象,或者通过其他方法调用COM对象,然后通过对象所实现的COM接口调用它所提供的服务。当所有的服务结束后,如果客户程序不再使用该COM端口,那么它应该释放掉对象所占有的空间,包括对象本身。(这是基本程序设计思想)

COM组件和COM对象的区别

 

COM结构

COM库为具体实现提供了核心服务。

对象和接口

接口是一组逻辑上相关的函数集合,其函数也被称为接口成员函数。对象通过接口成员函数为客户提供各种形式的服务。