【CComPtr】CComPtr和CComQIPtr的区别

ATL智能指针类CComPtr与CComQIPtr解析 立即下载
2011年06月16日 下午 06:14
ATL 提供了2个智能指针的模板包装类,CComPtr<> 和 CComQIPtr<>,这两个类都在 <atlbase.h> 中声明。CComQIPtr<> 包含了 CComPtr<>的所有功能,因此我们可以完全用 CComQIPtr<> 来使用智能接口指针,唯一要说明的一点就是:CComQIPtr<> 由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此 CComQIPtr<> 唯一的缺点就是不能定义 IUnknown * 指针。
    // 智能指针 smart pointer,按照匈牙利命名法,一般以 sp 开头来表示变量类型
    CComPtr < IUnknown > spUnk; // 正确
    // 假设 IFun 是一个接口类型
    CComPtr < IFun > spFun; // 正确
    CComQIPtr < IFun > spFun; // 正确
    CComQIPtr < IFun, &IID_IFun > spFun; // 正确
    CComQIPtr < IUnknown > spUnk; // 错误!CComQIPtr不能定义IUnknown指针

给智能指针赋值的方法:

    CComQIPtr < IFun > spFun; // 调用构造函数,还没有赋值,被包装的内部接口指针为 NULL
    
    CComQIPtr < IFun > spFun( pOtherInterface ); // 调用构造函数,内部接口指针赋值为
    // 通过 pOtherInterface 这个普通接口指针调用QueryInterface()得到的IFun接口指针
    
    CComQIPtr < IFun > spFun( spOtherInterface ); // 调用构造函数,内部接口指针赋值为
    // 通过 spOtherInterface 这个只能接口指针调用QueryInterface()得到的IFun接口指针
    
    CComQIPtr < IFun > spFun ( pUnknown ); // 调用构造函数,由IUnknown的QueryInterface()得到IFun接口指针
    
    CComQIPtr < IFun > spFun = pOtherInterface; // = 运算符重载,含义和上面一样
    spFun = spOtherInterface; // 同上
    spFun = pUnknown; // 同上
    
    pUnknown->QueryInterface( IID_IFun, &sp ); // 也可以通过QueryInterface赋值
    
    // 智能指针赋值后,可以用条件语句判断是否合法有效
    if ( spFun ){}  // 如果指针有效
    if ( NULL != spFun ){} // 如果指针有效
    
    if ( !spFun ){}  // 如果指针无效
    if ( NULL == spFun ){} // 如果指针无效

智能指针调用函数的方法:

    spFun.CoCreateInstance(...); // 等价与 API 函数::CoCreateInstance(...)
    spFun.QueryInterface(...); // 等价与 API 函数::QueryInterface()
    
    spFun->Add(...); // 调用内部接口指针的接口函数

    // 调用内部接口指针的QueryInterface()函数,其实效果和 spFun.QueryInterface(...) 一样
    spFun->QueryInterface(...); http://www.wzszf.com/ 
    
    spFun.Release(); // 释放内部的接口指针,同时内部指针赋值为 NULL
    spFun->Release(); // 错!!!一定不要这么使用。
    // 因为这个调用并不把内部指针清空,那么析构的时候会被再次释放(释放了两次)
智能指针CComPtr_和_CComQIPtr 立即下载

相关推荐

LT9211 单路mipi转双路mipi芯片,方案成熟,提供技术支持

LT9211 单路mipi转双路mipi芯片

TEL15012949045的博客 5026

CComPtr和CComQIPtr

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

tangaowen的专栏 1万+

告别路径打架!用Python实现CBS算法搞定仓库机器人调度(附完整代码)

本文详细介绍了如何使用Python实现CBS(Conflict-Based Search)算法解决仓库机器人调度中的路径冲突问题。通过多智能体路径规划(MAPF)技术,有效避免AGV在智能仓库中的碰撞和死锁,提供完整代码实现和工业场景优化技巧,帮助开发者快速构建高效的机器人调度系统。

weixin_30275415的博客 331

【COM/ATL COM组件中的尝试用的智能指针 ATL库中的CComPtr和CComQIPtr】

CComQIPtr 模板类接受两个参数:一个是目标 COM 接口的类型,另一个是源 COM 接口的类型(即你已经有其指针的接口)。当你通过 CComQIPtr 访问一个接口时,它首先会尝试从源接口指针中查询目标接口。查询接口是 COM 中的一个重要概念,它允许一个 COM 对象暴露多个接口,而客户端可以通过查询接口来获取这些接口的指针。CComPtr 是一个模板类,它封装了一个指向 COM 接口的指针,并提供了自动引用计数(Reference Counting)和接口指针释放的功能。

一起学习进步! 793

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1027

Mac上安装虚拟机搭载window系统

用Mac的都知道,很多window用的软件是Mac版本没有的。平时有的还得要求去用那些软件,有几种方式可供大家选择: 1.再买个window本; 2.装双系统; 3.装虚拟机,搭载window系统。 我比较推荐第3条,这样可以在Mac本上做到双开,一边开着mac一边开着window,还能做到同时处理文件,不至于重新启动操作系统,下边是具体实现步骤,其中有几个需要下载的,建议在网速好的时候完...

Coder_Mumu的博客 1万+

CComPtr`和`CComQIPtr`的特性

【代码】CComPtr`和`CComQIPtr`的特性。

波波诸葛伟 583

Altium Designer 21 DRC检查:从新手到高手,这10个常见错误你踩过几个?

本文详细解析Altium Designer 21 DRC检查中的10个高频错误,包括间距违规、线宽违规、未连接网络等常见问题,并提供精准修复方案和实战技巧。通过分层诊断、智能规则设置和三维排查等方法,帮助工程师从新手进阶为高手,提升PCB设计效率和质量。

weixin_26873711的博客 222

智能指针CComPtr和CComQIPtr的区别

<br />现在又开始接触COM组件啦<br />加油!<br />http://blog.youkuaiyun.com/b97/archive/2007/06/25/1666278.aspx<br />1) CComPtr和CComQIPtr都支持相应的内存管理<br />2) CComQIPtr模板类附加一个IID参数可以实现接口查询<br /><br />CComPtr<br />1) 超出有效范围自动 Release()<br />2) 注意防止重复调用 Release()<br /><br />CComQIP

liuchang631的专栏 777

Win10下Altera USB-Blaster驱动安装详解:禁用数字签名与排查指南

在嵌入式开发和FPGA调试过程中,驱动安装是工程师绕不开的环节,尤其是当操作系统对驱动签名有严格限制时,硬件往往无法被正常识别。数字签名是系统验证驱动程序来源和完整性的重要机制,Win10出于安全考虑,默认拒绝加载未经签名的驱动,这正是Altera USB-Blaster下载器在设备管理器中显示未知设备或黄色感叹号的根本原因。通过理解设备管理器的排查逻辑,掌握临时禁用驱动强制签名或开启测试模式的方法,配合正确的驱动文件路径选择与手动安装操作,即可解决Quartus无法检测到下载器的问题。这一流程同样适用于许

weixin_29164497的博客 247

Vue3 - 手机移动端H5网页强力解决弹起软键盘后页面被挤压变形或页面整体上移问题,点击input输入框键盘弹出底部被上推往上顶遮挡及各种问题(兼容安卓苹果ios手机,微信公众号网页微信内置浏览器)

vue3,h5网页,input输入框组件,vue3 h5软键盘弹出,vue3输入框,键盘弹起时页面整体上移问题,uni,H5页面,解决软键盘弹起页面被挤压、被往顶的问题,解决vue3输入框,键盘弹起时页面整体上移问题,vue3调用手机系统软键盘,页面窗口被顶起,布局定位失效,解决VUE3软键盘弹起导致页面fixed定位元素被顶上去,输入法软键盘弹起,窗口顶起,变形解决办法,Vue中input组件在IOS设备上弹出软键盘时页面整体上移问题的解决方案,以及input组件聚焦后弹出软键盘固定在,Vue3软键盘把界

🏆 前端领域优质创作者 1万+

CComPtr和CComQIPtr的区别

我现在 可没有这么厉害能自己写出来,只是网上看到的,转载过来 CComPtr m_spWebBrowser2;IUnknown *pUnknown;pUnknown->QueryInterface(&m_spWebBrowser2);CComQIPtr m_spWebBrowser2;IUnknown *pUnknown;m_spWebBrowser2 = pUnknown;对

eryadabendan的专栏 608

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测 目录时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测基本介绍ARIMAXVARVARMAVARMAXSESHWES参考资料 基本介绍 本文介绍ARIMAX、VAR、VARMA和VARMAX基本概念及其Python程序设计。 ARIMAX 具有外源回归量的自回归整合移动平均值(ARIMAX)是 ARIMA 模型的扩展,其还包括外生变量的建模。 外生变量也称为协变量,可以被认为是并行输入序列,其在与

前程算法屋的博客 6689

CComPtr 和 CComQIPtr

ATL 提供了2个智能指针的模板包装类,CComPtr,这两个类都在 中声明。CComQIPtr的所有功能,因此我们可以完全用 CComQIPtr 由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此 CComQIPtr   // 智能指针 smart pointer,按照匈牙利命名法,一般以 sp 开头来表示变量类型   CComPtr spUnk

firectrl的专栏 2485

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

智能指针CComPtr 和 CComQIPtr

1 简介 ATL 提供了2个智能指针的模板包装类,CComPtr和 CComQIPtr,这两个类都在  中声明。CComQIPtr包含了 CComPtr的所有功能,因此我们可以完全用 CComQIPtr来使用智能接口指针,唯一要说明的一点就是:CComQIPtr由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此 CComQIPtr唯一的缺点就是不能定义

把握自己。 2404

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

智能指针CComPtr 和 CComQIPtr(转)

<br />智能指针CComPtr 和 CComQIPtrATL 提供了2个智能指针的模板包装类,CComPtr<> 和 CComQIPtr<>,这两个类都在 <atlbase.h> 中声明。CComQIPtr<> 包含了 CComPtr<>的所有功能,因此我们可以完全用 CComQIPtr<> 来使用智能接口指针,唯一要说明的一点就是:CComQIPtr<> 由于使用了运算符的重载功能,它会自动帮我们调用QueryInterface()函数,因此 CComQIPtr<> 唯一的缺点就是不能定义 IUnkn

guoxin_min的专栏 867

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iSLIP算法:SDN交换机输入队列调度的二十年演进与实战

在高速网络交换中,输入队列调度是保障吞吐与公平性的核心技术。其原理基于迭代轮询匹配,通过请求、授予、接受三阶段仲裁,在硬件复杂度与性能间取得平衡。该技术价值在于以极低延迟逼近最大匹配吞吐,广泛应用于SDN交换机、FPGA网络加速及OpenFlow数据平面。从ATM到可编程流水线,iSLIP凭借O(log N)复杂度和99%吞吐,成为商用交换机调度基石。本文深入解析iSLIP的算法原理、硬件实现、多优先级与组播适配,并分享调试经验与参数优化策略。

weixin_33845881的博客 558
上一篇: 用CComPtr吧,COM接口指针很危险
下一篇: CComPtr对象作为参数进行 1.值传递 2.引用传递 3.做为返回值的注意事项
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值