《COM原理与应用》学习笔记一

  为了学习ActiveX插件的编写,从这几天开始学习COM原理。ActiveX是以COM为基础的,所以要想要比较深入的学习ActiveX技术需要先学习COM原理。

  COM是微软提出的组件标准。COM是在OLE技术的发展过程中产生的。OLE主要是实现复合文档,而且OLE1也只实现了复合文档的功能,OLE1使用的是一种被称为动态数据交换(DDE, Dynamic Data Exchange)的技术。其中DDE技术建立在Windows的消息基础之上,DDE有稳定性不好、效率低的缺点。所以,DDE很快的就被淘汰了。在OLE的第二个版本OLE2中,微软重写了OLE的大量底层代码,推出了新的COM模型。(以上内容摘自《COM原理与应用》,p10)

  COM包括了两个部分,一个是COM的规范,另一个就是提供组件程序运行所需要的环境。COM组件可以被视为一个模块,这个模块可以使动态链接库(Dll),也可以使一个可执行文件。而且COM的实现是在二进制代码上,不存在语言不同不能调用的情况,可以做到夸语言调用。而且现在大多数语言都支持COM,如C++、Java等主流语言都是支持COM的。

  COM的优势:我在最开始看COM的时候,就想到了这么一个问题。为了使用其他组件提供的功能,需要使用很多重复而麻烦的函数来载入组件,这不是很麻烦么,干嘛不直接使用dll解决问题得了。后来想了想,使用COM有几个优势。dll需要加载进入进程中去,而COM可以提供进程外的调用,甚至可以调用远程计算机上的组件。同时dll加载到进程中去以后,一旦dll中的函数崩溃,那么主进程也会崩溃。如果这是使用进程外调用,那么主进程仍然可以稳定的运行。

  面对一个具有很多功能的大型程序,我们都会很自然的想到把这些功能分成几个小块来实现。这样方便开发、测试以及维护。这些一个个的小模块就是组件。COM是一种面向对象的组件模型,支持继承、数据的封装等。COM组件就是基于COM规范的组件实现。COM对象则是某些功能的集合,这些功能都在一个抽象类中(此处是个人理解,欢迎大家拍砖)。COM接口则是COM对象用来提供服务的东西(值得注意的是,COM接口是一组用来提供一类完整服务的接口)。一个COM组件可以包含多个COM对象,一个COM对象也可以包含多个COM接口。如下图所示:

  在下一篇文章中,我将会做出一个实际的小例子,目前这个例子有点小问题,还没有弄好~

时间: 2024-08-02 10:52:42

《COM原理与应用》学习笔记一的相关文章

【Java编程思想--学习笔记(一)】访问控制-包

Java编程思想–学习笔记(一) 访问控制(或隐藏具体实现)与"最初的实现并不恰当"有关. 1.包:库单元 我们之所以要导入包,就是要提供一个管理名字的空间机制. 每个java文件只能有一个public类.其他私有类为主public·类提供支持. 1.1 代码组织 与编译型语言不同,java可运行程序是一组可以打包并压缩成java文档文件(JAR,使用Java的jar文档生成器)的.class文件. 使用package和import关键字,使得不会出现名称冲突问题. 注意:java包的

JAVA编程思想学习笔记——第一章 对象导论

搞了一年多java,野路子出身,发现java基础这块还是相当的薄弱!故决定学习<Java编程思想>这本书.在此把学习的知识点记录下! 面向对象的五大特性 1.万物皆为对象 2.程序是对象的集合,它们通过发送消息来告诉彼此所要做的 3.每个对象都由自己的由其它对象所构成的存储 4.每个对象都拥有其类型 5.某一特定类型的所有对象都可以接收同样的信息  单根继承结构 所有的类都继承自单一的基类,Object.在单根集成结构中的所有对象都具有一个公用接口,所以他们归根到底都是相同的基本类型.单根集成

[Java编程思想-学习笔记]第3章 操作符

3.1  更简单的打印语句 学习编程语言的通许遇到的第一个程序无非打印"Hello, world"了,然而在Java中要写成 System.out.println("Hello, world"); 我们都会感觉太冗长了,能不能简单一些呢?静态导入可以省略掉System,就像这样 import static java.lang.System.*; public class Hello { public static void main(String[] args) {

【java编程思想--学习笔记(四)】对象导论

写这篇博客的前言: 长话短说,我希望通过阅读<java编程思想>来使我的代码 简洁可用 . 目的的层次不同,首先具体的目标是,了解Java的特性和巩固Java的基础. 更抽象的目的如下: 1.期待以巩固基础的方式,使代码优美,简洁,高效. 2.使自己写的模块能够开放适度,好用. 3.形成一种对代码是否优美的审美观. 于是<Java编程思想>第一章 对象导论 由此开始. 1.1 抽象过程 java 相对于命令式语言的优势在于只针对于待解问题建模.后者所做的主要抽象要求所做问题基于计算

Java编程思想 学习笔记1

一.对象导论 1.抽象过程 Alan Kay曾经总结了第一个成功的面向对象语言.同时也是Java所基于的语言之一的Smalltalk的五个基本特性,这些特性表现了纯粹的面向对象程序设计方式 1)万物皆对象. 2)程序是对象的集合,它们通过发送消息来告知彼此所要做的.要想请求一个对象,就必须对该对象发送一条消息.更具体的说,可以把消息想象为对某个特定对象的方法的调用请求. 3)每个对象都有自己的由其他对象所构成的存储.换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象. 4)每个对象都

[Java编程思想-学习笔记]第1章 对象导论

1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, Run Anywhere". 所谓的抽象过程,可以理解为对待解问题建模.比如待解问题是一个人,那么我们可以对人进行建模,它的类型是人,有属性姓名.性别.年龄,还有行为吃饭.走路.Java能直接完全据此建模编码,而无需考虑具体的计算机结构.所以当我们阅读Java程序时,正如书上说的"当你在

java编程思想学习笔记

1.equals和==的区别(P65) java主要有两类数据类型: 基本数据类型(原始数据类型),主要有八种:byte,char,short,int,long,float,double,boolean   他们之间的比较用"==",比较的是他们的值 复合数据类型   若用"=="对他们进行比较,比较的是他们在内存中存放的地址,也就是他们的句柄,除非他们是同一个对象,他们"=="的比较结果为true,否则为false. "=="

【java编程思想--学习笔记(三)】访问控制-接口实现与类的访问权限

接口实现 什么是数据类型? java中将数据和方法包装在类中,隐藏具体的实现,其结果就是一种数据类型.(封装产生数据类型) 联想到八大基本数据类型,都具有上述的特点. 由于数据类型的上述特点,创造者将权限的边界划在数据类型的内部,将希望被访问的数据和方法与不希望被访问到的方法和数据分开,隐藏不希望被访问到的方法和数据,实际上就实现了接口和具体实现的分离. 也就是说,了解一个类如何去用,懂得其内部公开的变量和方法就可以. 类的访问权限 上面讲的都是将访问权限设置在类的内部,也可以将访问权限修饰词放

Java编程思想 学习笔记12

十二.通过异常处理错误  Java的基本理念是“结构不佳的代码不能运行”. Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型.可靠的程序的生成,并且通过这种方式可以使你更加自信:你的程序中没有未处理的错误. 1.概念 C以及其他早期语言常常具有多种错误处理模式,这些模式往往建立在约定俗成的基础上,而并不属于语言的一部分.通常会返回某个特殊值或者设置某个标志,并且假定接收者将对这个返回值或标志进行检查,以判定是否发生了错误.然而,对于构造大型.健壮.可维护的程序而言,这种错误处理

【java编程思想--学习笔记(二)】访问控制-Java访问权限修饰词

如果不提供任何访问修饰词,则意味着它是"包访问权限". 2.1 包访问权限 包访问权限赋予包内的类相互访问彼此成员的权限. 应该说, 包访问权限为将类群聚在一起的行为提供了意义和理由,即建立包的目的不仅仅是为了分类和区分,更是为了是同一个包内的类可以拥有彼此的代码. 取得对某一成员访问权的途径: 1)该成员的访问修饰词为public. 2)通过不加访问权限修饰词并将目标类放在同一包内的方式. 3)继承.子类可以访问父类的public和protected修饰词的成员,但只有在父子类处于同