COM将死?_COM技术内幕-微软组件对象模型书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > > COM技术内幕-微软组件对象模型 > COM将死?
西山 COM技术内幕-微软组件对象模型 的书评 发表时间:2009-05-12 23:05:18

COM将死?

  随着.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将死?”的回应

听雨斋人 2012-07-07 18:03:25

分析的很透彻啊~