com学习笔记
学习教材:COM本质论
暂且记录,然后整理
2006-03-07 10:33
接口继承(interface inheritance)
第一章 com是更好的C++
代码重用的缺点:为了实现冲用,必须要理解其他开发人员的设计和变成风格……,
//这句话说的很好,说到我心里去了
软件分发,如果直接以代码形式分发,即将类编译到客户程序中,那么除了占用不必要的空间,还对更新造成很
大的困难。因为,如果类被改变,或者发现存在某种错误,就需要重新编译客户端程序。
//读到这里我已经感觉COM确实是个好东西,原谅我没有早一点学习它。
使用dll是否能解决上面的问题呢?
使用DLL确实能部分解决上面的问题,但是,dll存在的问题是不同的编译器产生的dll之间可能不能协同工作,
“不足以创建‘厂商独立的组件软件’”
//com是二进制形式分发的,所以,不存在不同厂商组件之间的兼容问题。
c++的封装问题(使用dll的又一个问题)。c++的编译模型要求客户的编译器能够访问与对象的内存布局有关的
所有信息,这样才能构造实例。假设客户程序使用了一个dll,在dll中定义了一个类,在客户程序编译的过程中
,编译器得到dll中定义类的大小,并为其分配内存(这个分配的内存空间大小在程序运行期间是固定的),如
果我们有新版本的dll,这个dll中的类被修改,类的大小被改变了。分发之后,如果还是用以前编译的客户程序
调用这个dll就会出现错误,因为程序为其分配的内存不能满足要求了。
句柄类:一个类表示接口,一个类表示实现。在接口类中保存实现的句柄。这样实现了接口和实现的分离,实现
的修改不会影响到现有的系统。可以部分解决编译器/连接器兼容性问题。
接口类的虚函数总是通过保存在vtbl中的函数指针被间接调用,客户程序不需要在开发时候链接这些函数的符号
名。唯一需要通过名字显式链接的入口函数是CreateFastString,这个全局函数一exern "C"引出,避免了符号名
改编方式的冲突。
运行时多态
对象扩展性。接口不变形
创建COM,从代码重用,到dll,再到接口实现分离,到虚函数的接口实现。
//明白了我们为什么需要com,实现二进制级别的代码重用。为什么com会如此受到人们喜爱,因为它的封装,接口实现分离。很多优点,我也不多说了
我学习的习惯是第一遍看懂,浏览,然后再回头重新学习一遍
这个就是记录一下学习过程,等全部学完再整理一下。