COM编程概述
所谓COM,英文为Componet Object Model,中文为组件对象模型(其实这种解释只有在考试卷上才具有一点实际意义)。
【1】为什么需要COM?
COM是为了解决OLE问题而产生的。COM与OLE的关系类似于微积分与物理的问题。
实际上牛顿当年就是为了解决物理中的机械及动力学问题而发明微积分,后来微积分才作为一种有效的工具被用于其它学科之中。
《倚天屠龙记》中张无忌当初为了驱除身体中玄魔神掌的寒气而学习九阳神功,其实他根本不晓得九阳神功随后能帮他解决那么多棘手的问题。
【2】COM本质指什么?
COM本质是一种说明如何建立可动态互变组件的规范。这种规范提供了为保证能够互操作,客户和组件应遵循的二进制和网络标准。
通过这种标准将可以在任意两个组件之间进行通信而不用考虑其所处的操作环境是否相同、使用的开发语言是否一致以及是否运行于同一台计算机。
【3】COM规范的作用?
COM作用:提供一种独立于平台与编程语言之外的,共享二进制代码的方法。
在COM规范下将能够以高度灵活的编程手段来开发、维护应用程序。
可以将一个单独的复杂程序划分为多个独立的模块进行开发,这里的每一个独立模块都是一个自给自足的组件,可以采取不同的开发语言去设计每一个组件。
在运行时将这些组件通过接口组装起来以形成所需要的应用程序。构成应用程序的每一个组件都可以在不影响其它组件的前提下被升级。
这里所说的组件是特指在二进制级别上进行集成和重用而能够被独立生产获得和配置的软件单元。
COM规范所描述的即是如何编写组件,遵循COM标准的任何一个组件都是可以被用来组合成应用程序的。
至于组件采取的是何种编程语言则是无关紧要的,可以自由选取。
作为一个真正意义上的组件,应具备如下特征:
1. 实现了对开发语言的封装。
2. 以二进制形式发布。
3. 能够在不妨碍已有用户的情况下被升级。
4. 在网络上的位置必须能够被透明的重新分配。
这些特征使COM组件具有很好的可重用性,这种可重用性与DLL一样都是建立在二进制基础上的代码重用。但是,COM在多个方面的表现均要比DLL的重用方式好的多。
例如,在DLL中存在的函数重名问题、各编译器对C++函数名称修饰的不兼容问题、路径问题以及与可执行程序的依赖性问题等在COM中通过使用虚函数表、查找注册表等手段均被很好的解决。
其实COM组件在发布形式上本身就包扩DLL,只不过通过制订复杂的COM规范,使COM本身的机制改变了重用的方法,能够以一种新的方法来利用DLL并克服DLL本身所固有的一些缺陷,从而实现了更高层次的重用。
【4】COM中的基本元素有哪些?
(1) 接口:一个名字以大写的I开头的抽象基类,包含一组虚方法,接口可以从其它接口继承,但不能继承于多个接口,只能从一个接口继承。
(2) coclass (Component Object Class,组件对象类,通常被称为COM类): COM类通常就是一个C++类,这个类继承自一个或者多个接口,并实现它们,COM对象在内存中的表现
就是这个COM类的一个实例。
(3)COM服务器: 包含了一个或者多个coclass的二进制DLLs或者EXE执行体。
(4)注册(Registration): 创建注册表入口的一个过程,告诉Windows操作系统COM服务器放在什么位置。
(5)取消注册(Unregistration):从注册表删除这些注册入口。
(6)GUID(谐音fluid,意思是全球唯一标示符Globally unique identifier): 是一个128位的数字,其实它和COM无关,在其他地方我们也经常看到它,只不过COM中的接口和coclass都
拥有一个GUID,因为是全球唯一的,所以避免了名称冲突。
(7)UUID(universally unique identifier): 同GUID。
(8)CLSID(类ID): 是coclass的GUID。
(9)IID(接口ID): 是interface的GUID。
(10)HRESULT: 是一个代表着成功或错误代码的整型或长整型的数字,对COM对象的调用经常会返回一个HRESULT,虽然用H开头,但并不是句柄的意思。
(11)COM库:操作系统的一部分,调用COM组件时就是COM库在协助你完成调用。
总而言之,COM是为了功能模块的重用。只不过重用的级别是二进制代码,相比于STL是C++源码级重用,其明显更胜一筹。
Good Good Study, Day Day Up.
顺序 选择 循环 总结
COM编程概述的更多相关文章
- 【WCF--初入江湖】01 WCF编程概述
01 WCF编程概述 SOA的优点 1.服务独立于平台和工作环境.服务并不关心自己所处的环境,也不关心与之进行通信的服务所处的 环境. 2.服务相互隔离. 3.服务对协议.格式和传输中立. 4. ...
- Android网络编程概述
Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...
- [C#] 《Concurrency in C# Cookbook》读书笔记(一)- 并发编程概述
并发编程概述 前言 我们经常在耳边听说一些关于高性能.并发和并行等名词,并且很多人都对并发编程有一些误解. 误解 1:并发就是多线程? 答:多线程只不过是并发编程的其中一种形式而已.并发编程的种类很多 ...
- C# 图解教程 第二章 C#编程概述
C#编程概述 一个简单的C#程序标识符关键字Main:程序的起始点从程序输出文本注释 C#编程概述 一个简单的C#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序 ...
- 并发编程概述--C#并发编程经典实例
优秀软件的一个关键特征就是具有并发性.过去的几十年,我们可以进行并发编程,但是难度很大.以前,并发性软件的编写.调试和维护都很难,这导致很多开发人员为图省事放弃了并发编程.新版.NET 中的程序库和语 ...
- Windows Embedded Compact 7网络编程概述(下)
11.1.1 Select I/O模型 在Windows CE中,Select模型是唯一被支持的I/O模型.Select I/O模型就是利用select函数对I/O进行管理. 函数select的功能在 ...
- 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)
并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...
- day01 编程概述及计算机组成原理
目录 编程概述 计算机硬件的五大组成部分 Central Processing Unit(cpu中央处理器) 存储器 输入,输出设备 打开QQ的流程 计算机五大组成部分补充 多核CPU ×64/x86 ...
- MindSpore API编程概述
MindSpore API编程概述 总体架构 MindSpore是一个全场景深度学习框架,旨在实现易开发.高效执行.全场景覆盖三大目标,其中易开发表现为API友好.调试难度低,高效执行包括计算效率.数 ...
- C#编程概述(摘抄)
C#编程概述 一个简单的C#程序 标识符 标识符是一种字符串,用来命名变量.方法.参数和许多后面将要阐述的其他程序结构. 关键字 所有C#关键字都由小写字母组成,但是.NET类型名使用Pascal大小 ...
随机推荐
- mac共享文件给win7用户
我的mac上有项目文件和配置好的php及其框架环境,需要让win7用户可以访问并且可以修改文件.前提是两个人在一个网段哦~ 1.首先将我的ip地址及域名放到win7用户的hosts下 . 地址是C:\ ...
- 在CentOS6.5上安装Tomcat6
Tomcat安装一向方便,linux的比win的更是这样,基本就是拷贝,类似于win中备受青睐的绿色软件,下面只是记录一下过程. 1.从 http://mirrors.cnnic.cn/apache/ ...
- LeetCode Expression Add Operators
原题链接在这里:https://leetcode.com/problems/expression-add-operators/ 题目: Given a string that contains onl ...
- JavaScript:文本域事件处理
文本域往往可以输入大量的文字信息,但是在文本域上有一些键盘的处理事件:onkeydown.onkeypress.onkeyup. 范例一:观察文本域的键盘事件处理 代码如下: 效果图如下: 默认状态: ...
- T4教程2 T4模版引擎之生成数据库实体类
T4模版引擎之生成数据库实体类 在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中 ...
- AbsListView.OnScrollListener
public static interface AbsListView.OnScrollListener android.widget.AbsListView.OnScrollListener 类 ...
- 审计参数 audit_trail
audit_trail参数定义了在哪里存放审计记录 默认是DB.如果将其设置为NONE,标准数据库审计功能被取消.audit_trail是静态参数,修改后必须重启数据库. 可以设置的值:- ...
- transient关键字的含义
transient java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持. Java的serialization提供了一种持久化对象实例的机制.当 ...
- Swift语言实战晋级-第9章 游戏实战-跑酷熊猫-3 显示一个动态的熊猫
一个静态的熊猫明显不能满足我们的欲望,接下来我们就让熊猫跑起来.序列帧动画的原理就是不停的切换不同的图片.当我们将一张一张的切换Panda类的跑动文理后,熊猫就跑起来了.那么首先我们需要一个数组常量来 ...
- Codeforce Round #228 Div2
这次的A题没注意要到100- -, B题没做,后来做要注意下1和long long C题当时坑的一B,用了个蠢办法,后来还错了,现在改了,还是蠢办法,等等再去用dp吧,而且本来就只有01用个鸡巴的树状 ...