CComPtr和CComQIPtr

CComPtr和CComQIPtr是ATL中两种智能接口指针,用于自动管理COM对象的引用计数。CComPtr只能管理已知接口,而CComQIPtr能自动调用QueryInterface获取指定接口。它们在构造、赋值、释放等操作时具有智能管理功能,简化了COM编程中的异常处理和资源管理。在使用中,CComQIPtr提供了更多灵活性,如从不同类型的接口转换。
摘要由CSDN通过智能技术生成

                                                                     CComPtr和CComQIPtr

    CComPtr和CComQIPtr是智能接口指针类,它们在销毁的时候,不需要手动去释放接口指针,在赋值的时候,也不需要手动的AddRef,在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。

     CComPtr和CComQIPtr的不同的地方:CComPtr只能创建固定的特定的接口指针实例。而CComQIPtr不但实现了CComPtr的所有的功能,而且当我们把一个不同类型的接口指针赋值给CComQIPtr的时候,CComQIPtr会自动的调用接口指针的QueryInterface接口,来获得对应的正确的接口指针。

     (1) 构造函数

            第一个参数为智能接口指针的类型,第二个参数为 智能指针的接口ID。

            CComPtr<IUnknown> punk;

            //下面三个例子完全相同

            CComPtr<IXXX> pno;

            CComPtr<IXXX,&__uuidof(IXXX)> pno;

            CComPtr<IXXX,&IID_IXXX> pno;

      CComQIPtr可以用任何一个类型的接口指针初始化,如果初始化的值与CComQIPtr的类型相同,那么构造函数简单调用 指针的AddRef,但是,如果类型不同的话,它会先调用指针的QueryInterface来获得相同的类型的接口指针,当QueryInterface失败的话,内部指针会被设置为NULL。

           所有下面的代码,可以用来检测是否转换成功:

           

      (2)赋值

          赋值的时候,发生下面三件事:<

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值