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大小 ...
随机推荐
- Java学习-015-CSV 文件写入实例源代码
在日常的自动化测试脚本编写的过程中,有时要将获取的测试结果或者测试数据存放在数据文件中,以用作后续的参数化测试.常用的文件文件类型无非 txt.csv.xls.properties.xml 这五种文件 ...
- synchronized原理
http://www.cnblogs.com/YDDMAX/p/5658607.html http://www.cnblogs.com/YDDMAX/p/5658668.html synzhroniz ...
- web前端学习网址
最近一次电脑崩溃,重装系统所有在浏览器的网址,烟霄云散了…… 手册网址: http://www.shouce.ren/api/index demo学习网址: http://www.w3cplus.co ...
- 更改AlertView背景
UIAlertView *theAlert = [[[UIAlertViewalloc] initWithTitle:@"Atention" message: @"I'm ...
- 在windows下使用cmd命令行对java文件进行编译和执行
windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量 相关配置链接:java基础学习总结—— ...
- linux操作技巧
1. 打开终端 ctrl+ALT+T 新终端 ctrl+shift+T 原有终端新页面 2. 忘记root密码 redhat下 单用户进入grub 在核心文件后加"single&qu ...
- C# 调用C++动态链接库
项目中需要调用一个 USB接口的设备,用WPF写上位机,设备提供了C++的动态链接库. 按照已找到的资料,将 .dll .h 和相关依赖项都放在 程序的运行目录中,执行,会报错,找不到“XXX.d ...
- 使用Adreno Profiler分析android游戏
有时候我们需要对自己的游戏或者别人的游戏进行分析,比如我们需要了解一个引擎的大体渲染的流程,这个时候我们可以借助一些工具,在PC上我们可以使用Microsoft PIX.Intel GPA.Nvidi ...
- Oracle 10G如何从recovery catalog中Unregister目标数据库
从10g开始,RMAN简化了unregister目标数据库的步骤 方法1: $rman target system/oracle@test catalog rman/rman@catadb rman& ...
- C++ note
主要是为了学习c++的类和对象 内容摘自 c++概述 http://see.xidian.edu.cn/cpp/biancheng/cpp/rumen_1/ 1,变量 ,C++中,我们可以在 ...