COM基础

以下内容摘自《http://www.cnblogs.com/huangyong9527/archive/2010/09/30/1838270.html》

C++是面向对象编程语言,提供语义上的封装性,但没有提供二进制意义上的封装,为了在不同语言之间能够实现复用,需要提供二进制意义上的封装。C++本身是实现COM的比较好的手段。并非只有C++才能实现COM,COM是一种规范,只要符合某种内存布局即可,下面会提到这种内容布局。而C++虚函数的内存布局恰好和COM规范的内存布局吻合,所以C++实现COM更合适而流畅。关于如何实现二进制封装,主要通过接口和实现的分离来实现,接口不变即可。

 

COM可以由三种接口类型予以区分,它们是自定义接口(custom),调度接口(dispatch)和双重接口(dual interfaces)。

IDispatch可以由IUnknown得到,并且在IUnknown本身所含有三个方法(AddRef,Release和QueryInterface)上增加另外四个方法(GetTypeInfoCount,GetTypeInfo,GetIDsOfNames和Invoke)。

GetIDsOfNames
将单一的数字或一组可选的参数映射到一组对应的整形DISPID上,这些DISPID随后可以用来调用Invoke。
GetTypeInfo
得到对象的类型信息,从而可以通过它来得到接口的类型信息。
GetTypeInfoCount
得到对象所提供的类型信息接口的数目(0或1)。
Invoke
提供对对象暴露出来的属性和方法的访问。
posted on 2014-06-04 09:41  aoun  阅读(179)  评论(0编辑  收藏  举报