cOM 指针

最近在玩 MSHTML 和 MSXML,被一堆 COM 接口搞的晕头转向。以前也玩过一些,但基本都是照抄别人的代码,也没注意到 IDispatch * 和 IDispatchPtr 有啥区别,就模糊的认为可能是同一个东东的两种写法罢……这次趁机仔细研究了一番,转载3篇 COM 智能指针的详细的介绍,以备不时之需 ATL智能指针类 ATL中包含的智能指针包括:CAutoPtr、CAu
摘要由CSDN通过智能技术生成

最近在玩 MSHTML 和 MSXML,被一堆 COM 接口搞的晕头转向。

以前也玩过一些,但基本都是照抄别人的代码,也没注意到 IDispatch * 和 IDispatchPtr 有啥区别,就模糊的认为可能是同一个东东的两种写法罢……

这次趁机仔细研究了一番,转载3篇 COM 智能指针的详细的介绍,以备不时之需

 ATL智能指针类

ATL中包含的智能指针包括:CAutoPtr、CAutoPtrArray和CAutoPtrList, CComPtr和CComQIPtr

一、CAutoPtr、CAutoPtrArray和CAutoPtrList

CAutoPtr是普通智能指针类,CAutoPtrArray是智能指针数组,两者都在atlbase.h中声明;CAutoPtrList是智能指针列表,在atlcoll.h中声明。

二、CComPtr和CComQIPtr

CComPtr和CComQIPtr都是用来管理COM接口指针的类,CComQIPtr可完全取代CComPtr,两者的区别在于:CComQIPtr实现了运算符的重载功能,它可以自动调用QueryInterface()函数,CComQIPtr 唯一的缺点是不能定义 IUnknown * 指针。CComQIPtr<IUnknown > spUn是错误的。

1.声明和定义:

声明和定义一个CComQIPtr指针ISample。

CComQIPtr<ISample> spSample(IOtherInterface); 等价于

CComQIPtr<ISample> spSample =IOtherInterface;/*运算符重载*/  等价于

CComQIPtr<ISample> spSample;

IOtherInterface->QueryInterface(IID_ISample, &spSample);

2.函数调用:

智能指针调用函数分智能指针函数调用和智能指针内部接口指针函数调用,如上面声明的spSample,

spSample.CoCreateInstance(),spSample.QueryInterface等价于API函数调用::CoCreateInstance()和::QueryInterface();

spSample.QueryIn

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值