智能指针CComPtr和CComQIPtr的区别

现在又开始接触COM组件啦

加油!

http://blog.csdn.net/b97/archive/2007/06/25/1666278.aspx

1) CComPtr和CComQIPtr都支持相应的内存管理
2) CComQIPtr模板类附加一个IID参数可以实现接口查询

CComPtr
1) 超出有效范围自动 Release()
2) 注意防止重复调用 Release()

CComQIPtr
1) 附加参数IID, 构造的时候直接获得接口类实例

Example:

[CComPtr]
CComPtr<IXXX> ptrXXX;
HRESULT hr = CoCreateIntance( CLSID_XXX, NULL, CLSCTX_LOCAL_SERVER, IID_XXX, (void**) ptrXXX);

...

ptrXXX->XXX


[CComQIPtr]

CComQIPtr<IXXX, &IID_XXX> ptrQIXXX<ptrXXX>;
if ( ptrQIXXX )
   ...

注意:
   它们都是模板类, 上述例子中的ptrQIXXX是和ptrXX创建自的接口的另一个接口, 他们属于同一个组件, 所以使用的时候, 只要获得一个接口实例, 根据接口的传递性就能够直接获得另一个需要的接口, 隐式的调用了QueryInterface, 它们都提供一个Release方法, 但是使用 = 0, 也可以释放, 鉴于其超出使用范围自动调用的机制, 建议不要显式的调用, 由此带来的问题就是, 如果作为全局变量, 其析购时刻甚至晚于主进程, 所以无法使用CoUninitalize, 所以我在项目中还是使用*.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值