COM初学 (一) 理论入门

来源:互联网 发布:笑傲江湖ol捏脸数据 编辑:程序博客网 时间:2024/06/07 10:20

163博客迁移!


面向对象
整个世界是由不同的对象组成的,花、草、人、动物等等,所有的这些对象是有其特定的固有的属性,例如:人有很多的行为属性(走、跑、跳..)、心里属性(哭、笑...),我们将该对象的这种固有的、稳定的特征找出来,归纳为一系列的方法,例如就是前面提到的人的行为方法:描述怎么的方法、描述怎么的方法、描述怎么的方法等等,这种思想,我们就称之为面向对象
在软件工程的世界中,编写代码从早先的数据结构编程(单纯只是实现某些功能),到高级语言支持面向对象编程(C++支持面向对象开始引入哲学概念,特别开始强调对象的复用,例如:有些人开发了一套对象的方法,别人就可以直接复用这些行为方法,但是还不是很方便,因为还要引用很多别人的代码,语言要相同,环境要相同,要合起来编译之类的,就和你准备造一个自己的房子(写你的软件)一样,而对象就是一个个砖块(用了别人的对象方法),你这个房子搭建的过程中,如果厂家有了更好的砖块,你要麻烦的去更新的你砖块(重新更新对象,编译,集成), 差不多就这个意思了!),再到模块化对象编程(应该这个是更好的一种思想,也即,将所有的功能都进行实体模块化,也就是说,你直接提供一个可以直接使用的对象给别人,别人不用做任何集成的事情,拿来就可以直接用,然后有一些接口给用户,本对象有哪些方法以供调用,也可以理解为你可以参考对象给的接口,给对象发送一些指令,让对象直接执行,和机器人是一个比较类似的概念了),这个应该是一个趋势。

Com组件
那么我所理解的COM组件,就是具备模块化对象的思想这么一个东西(虽然思想很先进,但是现实情况不是很好,因为目前只在windows上用,按理说这么高级的思想大家都应该一起参与,这是为什么?下面是本人查看资料后的一个入门的理解。)。
COM首先是一个对象,它是一个二进制的对象,它可以是进程内的(windows上一般表现为DLL),也可以是独立进程的(windows上一般表现为exe),为什么COM目前只在windows上有,我的理解目前主要是因为方便大家相互之间要使用COM,那么COM就有了一套规范,而且是windows定义的规范,COM编程需要满足这套规范,举个简单的例子,为了说明我给你用的COM没有和别人重复命名,我自己的COM就要有一个GUID标识;为了说明我是放在系统的什么位置的,那么我在别人用我的时候,就要初始化一下,然后在注册表里填写好我自己这个COM的所在的路径,等等所类似的东西,那么这个问题就来了,Linux/MacOS上是没有注册表这样的东西的,微软肯定也不会给别平台去搞一套费力不讨好的事情,所以COM后面就演化为只在windows上存在的一种东西了,但是这个对象实例模块化的思想其它的平台都是可以借鉴的。
主要说Windows, 其实Windows一直遵循开发工程师只要拿着微软提供的API手册或者文档,让用户主要学会用,然后去做业务逻辑就可以了,这个好像是微软对工程师的要求(这里不得不吐槽一下,微软把具体实现的细节都屏蔽了,然后为了设计一套接口,必须设计一个比较复杂的框架来支持,从各个层面都能感受到这种设计思想,例如windows的各种过滤驱动,WFP过滤框架,MiniFilter之类的,让你们变笨了,只要简单的使用它就行,这个不从商业角度上考虑,我觉得是对技术的一种极大的不尊重,开源的才是王道! 所以本人很不喜欢windows开发,不过windows的一些技术能力确实很强)。
实际上,COM不必要搞这么复杂,现在COM的使用,在Windows上实际上应该有个COM的服务,专门来针对COM进行处理,也就是上面提到的,读取注册表路径,产生COM对象,获取COM指针等;所以,我们在创造一个COM的时候,就要实现一些规定的接口,来方便windows自己的COM服务能够识别,进行统一的管理,应该就是这个,导致了其它平台没有COM这个东西。
前面只是聊了下COM的一些思想,技术上主要还是参考相关资料,已经非常多了,有空写个COM例子入门。
参考: http://blog.csdn.net/zhu2695/article/details/9256173   ----用VC进行COM编程所必须掌握的理论知识

原创粉丝点击