有关QueryInterface函数

有关QueryInterface函数一,QueryInterface函数原型:HRESULT __stdcall QueryInterface(const IID&iid,void**ppv);iid:标志客户所需的接口。是”一个接口标志符“结构(IID)。ppv:QueryInterface用来存放所请求接口的地址。返回值:可以返回S_OK或E_NOINTERFACE应该用SUCEEDED或者FAILED宏验证

大家好,又见面了,我是你们的朋友全栈君。

一,QueryInterface函数
原型:

HRESULT  __stdcall QueryInterface(const IID&iid,void **ppv);

iid:标志客户所需的接口。是”一个接口标志符“结构(IID)。
ppv:QueryInterface用来存放所请求接口的地址。

返回值:可以返回S_OK 或 E_NOINTERFACE应该用SUCEEDED或者FAILED宏验证是否成功。

使用方法:

假如知道一个指向IUnknown接口的指针pI,传给它一个接口标志符即可

例如:

有关QueryInterface函数
void
 Foo(IUnknown 
*
 pI)
有关QueryInterface函数有关QueryInterface函数


{

有关QueryInterface函数    IX 
* pIX = NULL;
有关QueryInterface函数
有关QueryInterface函数    HRESULT hr 
= pI->QueryInterface(IID_IX,(void **)pIX);
有关QueryInterface函数
有关QueryInterface函数    
if(SUCCEEDED(hr))
有关QueryInterface函数有关QueryInterface函数    
{

有关QueryInterface函数      pIX
->FX();
有关QueryInterface函数     }

有关QueryInterface函数}


有关QueryInterface函数
有关QueryInterface函数

//
QueryInterface的实现。

有关QueryInterface函数


有关QueryInterface函数HRESULT _stdcall  CA::QueryInterface(

const
    IID
&
iid,
void
 
**
ppv)
有关QueryInterface函数有关QueryInterface函数


{

有关QueryInterface函数    
if(iid == IID_IUnknown)
有关QueryInterface函数有关QueryInterface函数    
{

有关QueryInterface函数      
*ppv = static_cast<IX *>(this);
有关QueryInterface函数    }

有关QueryInterface函数    
else  if(iid == IID_IX)
有关QueryInterface函数有关QueryInterface函数    
{

有关QueryInterface函数      
*ppv = static_cast<IX *>(this);
有关QueryInterface函数    }

有关QueryInterface函数    
else  if(iid == IID_IY)
有关QueryInterface函数有关QueryInterface函数    
{

有关QueryInterface函数      
*ppv = static_cast<IY *>(this);
有关QueryInterface函数    }

有关QueryInterface函数    
else  if(iid == IID_IUnknown)
有关QueryInterface函数有关QueryInterface函数    
{

有关QueryInterface函数      
*ppv = NULL;
有关QueryInterface函数      
return E_NOINTERFACE;
有关QueryInterface函数    }

有关QueryInterface函数
有关QueryInterface函数    static_cast 
<IUnknown *> (* ppv)->AddRef();
有关QueryInterface函数    retru S_OK;
有关QueryInterface函数
有关QueryInterface函数}

多重继承及类型转换。

通常将一种类型的指针转换为另一种类型并不会改变它的值。为了支持多重继承,某些情况下,C++必须改变类指针的值。
假如一个类定义如下:

class CA: public IX,public IY{…};

由于CA同时继承了IX,IY因此可以使用IX或IY指针的地方均可以使用指向CA的指针。

 

有关QueryInterface函数
void
 foo(IX
*
 pIX);
有关QueryInterface函数

void
 bar(IY
*
 pIY);
有关QueryInterface函数

int
 main()
有关QueryInterface函数有关QueryInterface函数


{

有关QueryInterface函数 CA
* pA = new CA;
有关QueryInterface函数 foo(pA);
有关QueryInterface函数 bar(pA);
有关QueryInterface函数 delete pA;
有关QueryInterface函数 
return 0;
有关QueryInterface函数}


有关QueryInterface函数
有关QueryInterface函数

foo需要一个指向合法的IX的虚拟函数表的指针;
bar需要一个指向合法的IY的虚拟函数表的指针;
当然IX和IY的虚拟函数表的内容是不一样的。因此将一个IX vtbl传给bar时,此函数是不能正常工作的。
因此编译器将同一指针传给foo和bar是不可能的,它必须对CA的指针进行修改以便他指向一个合适的vtbl指针。
下图显示了CA对象的内存结构。

2.jpg

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151157.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中,为什么byte类型的取值范围为-128~127?

    Java中,为什么byte类型的取值范围为-128~127?在学习Java基础语法的时候,初学者的我们可能都会有这么一个疑问为什么byte类型的取值范围为什么是[-128,127]而不是[-127,127]。01111111表示最大的数值:127,因为第一位是符号位,所以11111111应该是最小的数值:-127,不是这样才对?在解释这个问题之前我们需要了解几个概念:机器数、真值、原码、反码、补码机器数:一个数在计算机中的二进制表示形式,叫做这个数的机器

    2022年6月15日
    25
  • iOS锁屏时钟_ios时钟怎么调

    iOS锁屏时钟_ios时钟怎么调当设备在一定时间内没有触控动作,iOS会锁住屏幕。但有些应用程序是不需要锁住屏幕的,比如游戏,视频这类应用。可以通过设置UIApplication的idleTimerDisabled属性来指定iOS是否锁频://禁用休闲时钟[[UIApplicationsharedApplication]setIdleTimerDisabled:YES]; //也可以使用这种语法

    2022年9月27日
    1
  • 发送国外邮箱失败

    发送国外邮箱失败在公司当发送邮件给国外客户的时候,发送失败提示:点击下面链接:则代表地址被加入了黑名单,发送不到邮件。解决方法,点击方框内的网站,打开网页后拉到最下面:点击解除封禁跳转到则表示成功。需要1-2个小时进行解除! 转载于:https://blog.51cto.com/8763846/1629650…

    2022年7月12日
    25
  • c语言移位操作

    c语言移位操作

    2021年12月17日
    53
  • centos7卸载MySQL_centos7下安装mysql

    centos7卸载MySQL_centos7下安装mysql**centos7下mysql卸载**1.关闭mysql服务servicemysqldstop2.删除mysql目录whereismysql——找到mysql目录rm-rfxxxxx——xxxxx代表mysql目录3.删除mysql相关配置文件my.cnf4.后记此方法针对于网络状况不好的服务器,不是yum或者rpm方法安装mysql的卸载同样有效…

    2022年9月30日
    2
  • 股票历史数据库(腾讯股票历史数据接口)

    歪枣网财经数据下载接口集合,百度搜索歪枣网官网序号 名称 接口描述 数据字段 更新日期 操作0 A股列表 沪深京A股基本信息 code股票代码name股票名称stype股票类型,1:深证股票,2:上证股票,3:北证股票,4:港股hsgt沪深港通,1:沪股通:2:深股通、3:港股通(沪)、4:港股通(深)、5:港股通(沪+深)bk所属板块,个股包括主板、创业板、科创板cfg成分股,该板块的成分股roeROEzgb总股本(股)ltgb流通股本(股)ltsz流通市值(元)

    2022年4月10日
    285

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号