重读《COM原理与应用》之三——COM对象和接口(第二章)

COM接口

*客户获得接口指针,接口指针指向pVtable,pVtable指向vtable(虚函数表,每项4B的函数指针),函数指针指向对象实现。

*COM接口结构中的vtable与C++ class的虚函数表完全一致,所以,用C++的class来描述COM接口是最方便的手段。

*COM提供一种不依赖于任何语言的接口描述方法:IDL。IDL文件通过MIDL工具可编译为h头文件,可以被组件实现程序和客户程序引用。

 

COM接口的内存模型

*IDictionary的实现CDictionary,有两个对象CD1和CD2,内存结构中CD1和CD2有单独的(pVtable、Data、Property),但共用vtable和具体实现代码。

*IDictionary的实现CDictionary和CDictionary2,CDictionary对象CD1,CDictionary2对象CD2,内存结构中CD1和CD2有单独的(pVtable、Data、Property,以及vtable和具体实现代码)。

 

IUnknown

*IUnknown主要作用:生存期控制(引用计数)和接口查询。

*使用引用计数规则:(1)函数的参数中使用接口指针变量,输入参数不调用AddRef和Release,输出参数调用AddRef加1,输入输出参数不调用 AddRef和Release;(2)局部 接口指针 变量, 不调用AddRef和Release;(3)全局,传入前调AddRef,返回后调Release。

*注意COM对象实现多个接口时的内存结构,以及QI的具体实现。(参见P44-45,另注意P47的C++实现CDictionary中IUnknown的实现)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值