com关于IUnknown接口
com定义的每个接口都必须从IUnknown继承过来,主要原因是IUnknown接口提供了两个很重要的特性:生存期控制和接口查询。
客户程序仅仅能通过接口与com对象进行通信。尽管客户程序能够无论对象内部的实现细节。但它要控制对象的存在与否。
假设客户还要继续对对象进行操作。则它必须保证对象能一直存在于内存中;假设客户对对象的操作已经完毕。以后也不再须要该对象了,则它必须及时地把对象释放掉。以提高资源的利用率。IUnknown引入了“引用计数”方法,能够有效得控制对象的生存周期。
还有一方面。假设一个com对象实现了多个接口。在初始时刻。客户程序不太可能得到该对象全部的接口指针,它仅仅会拥有一个接口指针。假设客户程序须要其它的指针。那么它怎样通过这个接口指针获得还有一个接口指针呢?IUnknown使用了接口查询(”QueryInterface“)的方法来完毕接口之间的条状。
以下是IUnknown的定义:
class IUnknown
{public:virtual HRESULT _stdcall QueryInterface(const IID& iid,void** ppv) = 0;virtual ULONG _stdcall AddRef() = 0;vittual ULONG _stdcall Release() = 0;
};
当中,QueryInterface用于查询com对象的其它接口,AddRef和Release用于对引用计数进行操作。
转载于:https://www.cnblogs.com/yutingliuyl/p/6788876.html
com关于IUnknown接口相关推荐
- IUnknown接口QueryInterface函数介绍
一.COM组件的目标: COM组件的一个主要优势是:便于升级. 要实现这个优势需要满足一下两个条件: 1.运行时从客户程序动态加载和卸载,采用DLL技术可以实现. 2.为了更好的突出DLL的优势,还需 ...
- ArcGIS Engine 开发 (三)COM技术中的QueryInterface(接口查询)的实现原理和IUnknown接口
IUnknown IUnknown 接口是组件对象模型(COM)中的基础接口.COM规格书中规定COM对象至少要实现此一接口,而且其他所有的COM接口都需要派生自IUnknown接口. IUnknow ...
- IUnKNown接口——QueryInterface函数
转自:IUnKNown接口--QueryInterface函数 客户同组件的交互都是通过一个接口完成的.在客户查询组件的其他接口时,也是通过接口完成的.这个接口就是IUnknown.它在UNKNWN. ...
- 《COM原理与应用》学习笔记二——COM对象和COM接口的实现
COM对象是给用户提供服务的封装的实体.这个应该和C++中类的对象理解起来是相似的.但是有时候也把COM对象当作提供服务的那个类.COM对象也对数据进行了封装,然后也提供了接口.不过和类还是有一些不一 ...
- 【转载】COM 组件设计与应用(二)——GUID 和 接口
原文:http://vckbase.com/index.php/wv/1203.html COM 组件设计与应用 系列文章:http://vckbase.com/index.php/piwz?& ...
- com学习笔记(2)基本的com接口-QueryInterface的实现
QueryInterface 接上篇 一.COM接口的开始IUnknown com起于接口,又归于接口. com之所以是com,是因为其继承了一个名为IUnknown接口. IUnknown接口是 ...
- 框架通讯契约——接口
摘自<插件式GIS应用框架的设计与实现--基于C#和ArcGIS Engine9.2> 作者:蒋波涛 2.2 框架通讯契约--接口 插件式框架的宿主程序启动以后,它首先会遍历插件文件夹中 ...
- Com原理及應用——Com對象和接口
1.COM对象的理解 COM对象类似于C++语言中类的概念,类的每个实例代表一个COM对象,它也包括属性(即状态)和方法(即操作),状态反映对象的存在,方法就是接口. 2.COM对象的标识-CLSID ...
- CorelDRAWX4的C++插件开发(四十)纯C++插件开发(4)继承插件结构体IVGAppPlugin和自动化接口IDispatch
因为在注册插件的时候,是要传一个名为IDispatch*这样子的一个参数,所以我们可以看到插件在注册的时候默认就是要求这是一个实现了自动化的接口(IDispatch,如下图所示,是后面将要展示的代码, ...
最新文章
- 我为什么最终放弃了 Linux 桌面版的研发
- 微软官方office2010使用技巧宝典视频免费下载
- 【MFC】工具栏按钮单选效果
- android给数组添加新元素_重磅!超详细的 JS 数组方法整理出来了
- sqlserver 遇到以零作除数错误的处理 不报错的解决方法
- 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
- c++规定浮点数输出格式
- 深圳宝安学区房_查查吧深圳学区地图
- av_rescale_q
- OpenCV中出现“Microsoft C++ 异常: cv::Exception,位于内存位置 0x0000005C8ECFFA80 处。”的异常
- OpenStack HA
- 企业级的周报管理系统源码 采用了目前极为流行的扁平化响应式的设计风格
- MTK处理器心路历程
- 小曾WRF自学日记(3)渐入佳境 ——WRF实例-数据下载与WPS前处理
- 数码管显示“0~F”的共阳共阴数码管编码表
- 如何解压war后缀的文件:
- 若有以下定义和语句:double r=99, *p=r;*p=r; 则以下正确的叙述是 A) 以下两处的*p含义相同,都说明给指针变量p赋值 B) 在“double r=99, *p=r;“中,
- 小白兔写话_看图写话小白兔
- Linux 一句精彩的回答【转】
- scrapy多cookies+ip代理稳定爬取微博m站评论以及子评论
热门文章
- 克服DIMM近存计算系统的通信瓶颈,清华软件定义芯片团队提出DIMM间广播技术 | ISCA 2021...
- 一文看懂百度云智峰会:发布两大中台、八大方案,落地细节精准到发丝
- 我整理了HMOV四大5G旗舰的参数,可依然没能拯救我的选择困难症
- 史上最大中文知识图谱,规模达1.4亿,现在开源可下载,还有配套聊天机器人API...
- 百度Apollo首次披露纯视觉L4无人车方案:10摄像头,对标Mobileye
- Linux之systemctl命令的使用
- SSM项目整合Quartz
- scala简单学习---1
- php 超长用省略号代替
- win7-64系统安装oracle 11G客户端