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
提供对对象暴露出来的属性和方法的访问。

转载于:https://www.cnblogs.com/aoun/p/3767198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值