COM 组件接口的 IUnKnown 接口介绍

IUnKnown是一个接口。 所有COM接口都继承IUnKnown。IUnKnown的定义在WIN32 SDK中的UNKNWN头文件中。其定义如下:

interface IUnKnown
{
virtual HRESULT __stdcall QueryInterface(const IID& iid,void **ppv)=0;
virtual ULONG __stdcall AddRef()=0;
virtual ULONG __stdcall Release()=0;
}

IUnKnown接口的作用,COM定义的每一个接口都必须从IUnknown继承过来,其原因在 于IUnknown接口提供了两个非常重要的特性:生存期控制和接口查询。 客户程序只能通过接口与COM对象进行通信,虽然客户程序可以不管 对象内部的实现细节,但它要控制对象的存在与否。IUnknown接口是所有COM接口的根。

函数介绍:

1、客户同组件的交互都是通过一个接口完成的。在客户查询组件的其他接口时,也是通过接口完成的。这个接口就是 IUnknown。所有的 COM 接口都继承了 IUnknown,每个接口的vtbl中的前三个函数都是QueryInterface、AddRef、Release。这样所有COM接口都可以被当成
IUnKnown 接口来处理。

QueryInterface() 方法,System Interface IUnknown下的一个成员函数,客户可以通过此函数来查询某个组件是否支持某个特定的接口。若支持QueryInterface将返回一个指向这些接口的指针,不支持返回值将是一个失败结果。第一个参数是需要查询的接口的ID,第二个参数为按照第一个参数所查询到接口的指针。

2、第二个和第三个函数用于引用的计数和释放,在返回接口指针时调用 AddRef,在使用完接口时调用 Release。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 20:44:38

COM 组件接口的 IUnKnown 接口介绍的相关文章

com关于IUnknown接口

com定义的每个接口都必须从IUnknown继承过来,主要原因是IUnknown接口提供了两个很重要的特性:生存期控制和接口查询. 客户程序仅仅能通过接口与com对象进行通信.尽管客户程序能够无论对象内部的实现细节.但它要控制对象的存在与否. 假设客户还要继续对对象进行操作.则它必须保证对象能一直存在于内存中:假设客户对对象的操作已经完毕.以后也不再须要该对象了,则它必须及时地把对象释放掉.以提高资源的利用率.IUnknown引入了"引用计数"方法,能够有效得控制对象的生存周期. 还有

各种常见的交换机接口及连接方法介绍

各种交换机接口及连接方法介绍 1.常用交换机接口 1.1  RJ-45接口 这种接口就是我们现在最常见的网络设备接口,俗称"水晶头",专业术语为RJ-45连接器,属于双绞线以太网接口类型.RJ-45插头只能沿固定方向插入,设有一个塑料弹片与RJ-45插槽卡住以防止脱落. 这种接口在10Base-T以太网.100Base-TX以太网.1000Base-TX以太网中都可以使用,传输介质都是双绞线,不过根据带宽的不同对介质也有不同的要求,特别是1000Base-TX千兆以太网连接时,至少要使

redis C接口hiredis 简单函数使用介绍

hiredis是redis数据库的C接口,目前只能在linux下使用,几个基本的函数就可以操作redis数据库了. 函数原型:redisContext *redisConnect(const char *ip, int port) 说明:该函数用来连接redis数据库,参数为数据库的ip地址和端口,一般redis数据库的端口为6379 该函数返回一个结构体redisContext. 函数原型:void *redisCommand(redisContext *c, const char *form

实现跨域iframe接口方法调用 简单介绍

实现跨域iframe接口方法调用 简单介绍: 页面a.html域名为www.a.com,嵌入页面http://www.b.com/b.html. b.html要调用a.html中的js函数,由于两个页面不在一个域中,会提示没权限. 下面就介绍一下如何如何解决此问题,需要的朋友可以做一下参考. 一.cross.js代码如下: (function(global){ global.Cross = { signalHandler: {}, on: function(signal, func){ this

RESTful【第三章】:序列化组件的使用及接口设计

序列化组件的使用及接口设计 一.Django原生的serializer(序列化) 使用步骤: 1.导入模块 from django.core.serializers import serialize 2.获取queryset 3.对queryset进行序列化 4.将序列化后的数据,响应给客户端 实例: #1.导入Django自带的原生的序列化模块 from django.core.serializers import serialize class CourseView(APIView): de

接口及接口测试简单介绍

1.什么是接口:简单来说从数据库里面取数据(get请求)或是插入数据(post请求) 2.接口测试:就是功能测试,它比功能测试还要简单,不需要看页面,只需要看数据对不对就行 前端: web页面:html.css.js语言开发 ios的app:object-c.swfit语言开发 android的app:Android语言开发        (服务端给这些前端提供服务) 前后端是通过接口进行交互的:比如京东网页和京东app,比如login?username=lili&password=123456

opencv的C语言接口和C++接口差别(入门篇)

opencv是一个开源的图像处理库,最经典的1.0版本号提供的接口都是C语言接口. 后来的opencv2.x版本号保留了C语言接口,可是提供了C++接口,当中的C语言接口仅仅是为了向后兼容,而C++接口才是大势所趋. 那么这两者有什么差别呢?今天介绍一下配置过程中的差别. 以opencv2.3.0和vs2008为例.配置时.先要配置包括文件和库文件,然后在系统变量path中加入dll文件.最后再项目属性中加入附加依赖库.我平时用的功能不多.一般加入这几项opencv_core230.lib.op

转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 发表于 1年前 阅读 1422 收藏 28 点赞 0 评论 0 摘要: 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当.         http接口:基于HTTP协议的开发接口.这个并不能排除没

**微信接入探秘(一)——从零认识微信接口(主动接口和被动接口)

本文出处:http://blog.csdn.net/chaijunkun/article/details/53385088,转载请注明.由于本人不定期会整理相关博文,会对相应内容作出完善.因此强烈建议在原始出处查看此文 写在前面 回想起来今年还没有在CSDN上发过文章,草稿箱里积攒了很多话题,可由于时间关系最终也没发出来.不能再拖了,打算写个系列专题,聊聊微信接入. 随着微信用户量的不断增加,越来越多的企业也将自己的服务加入到了微信当中.微信本身提供的公众号.服务号的基础功能难以满足日趋增长的需