随着.NET的日益肆虐, COM技术逐渐陷于风雨飘摇:Visual Studio的支持鲜有加强,微软的宣传不再提及,市面上的技术书籍当然也不会逆势而行 - 这就是潮流。
不可否认,COM的没落与.NET崛起终究会发生(或者已经发生),作为一个程序员,与时俱进是不错,但为新技术而新技术未免不太可取,读一读曾经的经典技术,品一品其独特的设计思想,也是一个开阔眼界,曾强底蕴的好机会。况且,微软的技术更新是一个连续发展的过程,一定是一脉相承的,了解过去,定能更好的了解未来。
《Windows Internal》中提到CLR其实就是个COM Server,也就是说CLR是以COM技术为基础的,这就把COM和.NET联系的更加紧密了:.NET是更好的COM,COM却是实现.NET的基础。
读这本书应该是第二遍了,记得读第一遍时是在大学里,那时读下来感觉是似懂非懂,印象最深的也就是IUnkown的3个成员函数了。这次重读,是因为工作中又一次和COM“亲密接触”(是的,我们公司还用到很多COM的东西)。人说:“读书百遍,其义自见”,有了这几年工作中的体验,再读此书,感觉那是一个流畅,我们常用“共鸣”来形容这种感觉:“对,就是这样”, “啊,果然如此”,“哦,原来如此”,读此书感觉莫过于此。
读得过程印象中较为深刻的一些“点”:
1. COM组件是以DLL或Exe为载体,可以包含多个对象,而每个对象又可以支持多个接口。
2. 接口的本质是vtbl(虚拟函数表)。
3. CoCreateInstance的工作流程:根据提供的CLSID在注册表中查到对应的DLL,调用CoGetClassObject,调用DLL中回调函数DllGetClassObject创建类厂,再根据类厂创建对象。
4. 关于HRESULT,GUID,注册表与COM库函数(OLE32.dll)的介绍,简单但相当有用(OleView是个不错的查看组件的工具)
5. 聚合组件的原理与IUnkown的两个实现讲的非常细。
6. IDL文件产生类型库tlb(供其他程序访问组件)与代理/存根代码 (套件间,进程间的Marshaling)
7.调度接口(IDispatch)可以让你接受一个函数的名字就可以执行它。你在实现这个接口的时候只需维护一个<函数名,函数地址>的map,根据传入的名字查找真正要执行的那个函数,这个能力让我们可以在解释型语言中来使用组件,实现所谓的自动化。由此带来的缺点是在C++中使用组件时性能损失 - 毕竟,通过vtbl中指针偏移比在map中查找函数名要快的多。于是,就有了双接口:从IDispatch派生的接口,其同时赋予了我们这两种能力。就我所了解,一般的接口都是双接口,而且双接口中IDispatch接口实现就比较容易:根据tlb得到ITypeLib, ITypeInfo去使用就ok了。
8.一个组件对象的线程模型:STA, MTA和Both。这里套件(apartment)是一个用来同步COM调用的机制,类似于Win32中的用户界面线程(消息同步)。所以STA(Single Thread Apartment)的COM对象不必是线程安全的,而MTA(Multiple Thread Apartment)的COM对象则需要是线程安全的。
。。。。。。
如果需要再深入了解COM,可以读《COM本质论》, 如果要了解COM的将来, 可以读《.NET本质论》,如果想了解COM在ATL中实现,可以读《ATL Internal》以及ATL的源代码 - 我准备读。
COM将死?
对“COM将死?”的回应
《COM技术内幕-微软组件对象模型》热门书评
-
COM将死?
36有用 1无用 西山 2009-05-12
随着.NET的日益肆虐, COM技术逐渐陷于风雨飘摇:Visual Studio的支持鲜有加强,微软的宣传不再提及,市面上的技术书籍当然也不会逆势而行 - 这就是潮流。 不可否认,COM的没落与.NET崛起终究会发生(或者已经发生),作为一个程序员,与时...
-
COM入门好书
1有用 0无用 haitao 2010-07-05
这本书的作者讲解的功力很强,避开COM众多的旁支末节,从一些最基本的概念出发,一步步深入,让读者读起来感觉比较轻松。这是一本COM入门的好书。...
-
最佳COM入门
0有用 0无用 浅塘半亩 2014-03-31
本书从一开始,利用c++虚函数的多态特性模拟com,以跨平台为目标,一点点深入,一点点揭开com的面纱,为什么要查询接口?为什么是dll?为什么是注册表?等等,将COM的各种特性的缘由与解决方案娓娓道来,COM的设计...
书名: COM技术内幕-微软组件对象模型
作者: [美] Dale Rogerson
出版社: 清华大学出版社
译者: 杨秀章 | 江英
出版年: 1999-1
页数: 301
定价: 50.00元
ISBN: 9787302033202