QueryInterface IID_IDispatch

QueryInterface IID_IDispatchSTDMETHODIMPCMathFactory::QueryInterface(REFIIDriid,void**ppv){ *ppv=NULL; if(riid==IID_IUnknown||riid==IID_IClassFactory)//这儿不改变也可以! //if(riid==IID_IUnknown||riid==IID_IClassFactory||riid=

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

STDMETHODIMP CMathFactory::QueryInterface(REFIID riid,void ** ppv)
{
	*ppv=NULL;
	if(riid==IID_IUnknown||riid==IID_IClassFactory)//这儿不改变也可以!
	//if(riid==IID_IUnknown||riid==IID_IClassFactory || riid == IID_IDispatch)//改变
	{
		*ppv=static_cast<IClassFactory *>(this);
		reinterpret_cast<IUnknown*>(*ppv)->AddRef();
		return S_OK;
	}
	else
		return (*ppv=0),E_NOINTERFACE;
}

STDMETHODIMP CMath::QueryInterface(REFIID riid, void **ppv)
{//	这里这是实现dynamic_cast的功能,但由于dynamic_cast与编译器相关。
	if(riid == IID_ISimpleMath)
		*ppv = static_cast<ISimpleMath *>(this);
	else if(riid == IID_IAdvancedMath)
		*ppv = static_cast<IAdvancedMath *>(this);
	else if(riid == IID_IUnknown)
		*ppv = static_cast<ISimpleMath *>(this);
	else if(riid == IID_IDispatch)
		 //*ppv = static_cast<ISimpleMath *>(this);//方一
		 *ppv = static_cast<IAdvancedMath *>(this);//方二,都可以!
	else {
		*ppv = 0;
		return E_NOINTERFACE;
	}

	reinterpret_cast<IUnknown *>(*ppv)->AddRef();	//这里要这样是因为引用计数是针对组件的
	return S_OK;
}

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

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

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


相关推荐

  • 激活码pycharm_通用破解码

    激活码pycharm_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    32
  • 一对兔子从出生后第三个月起每个月_兔子繁衍问题python

    一对兔子从出生后第三个月起每个月_兔子繁衍问题python7-6 兔子繁衍问题 (20分)一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?输入格式: 输入在一行中给出一个不超过10000的正整数N。输出格式: 在一行中输出兔子总数达到N最少需要的月数。 输入样例: 30 输出样例: 9#includ…

    2022年8月18日
    4
  • Java map转实体类_java实体类转json

    Java map转实体类_java实体类转json1.Map和实体类之间的转换1.1以实体类User为例Useruser=newUser();Map<String,Object>map=newHashMap<>();1.2Map转为实体类Useruser=JSON.parseObject(JSON.toJSONString(map),User.class);1.3实体类转为MapMapnewMap=JSON.parseObject(JSON.toJSONString(user),M

    2022年10月4日
    0
  • 无锁编程 汇总

    无锁编程 汇总无锁编程主要是通过一系列原子操作实现。原子操作:1.  Read-Modify-Write(RMW)操作Win32上的_InterlockedIncrementandInterlockedDecrement,iOS上的OSAtomicAdd32以及C++11中的std::atomic::fetch_add。需要注意的是,C++11的原子标准不保证其在每个平台上的实现都是无

    2022年5月31日
    35
  • python怎么保留小数「建议收藏」

    python怎么保留小数「建议收藏」python如何保留小数点几位第一种round()函数a=1.23456print(round(a,2))print(round(a,3))1.231.234第二种format()函数print(format(1.23456,’.2%f’))1.23第三种’.2%f’%fq=1.234print(‘.2%f’%q)1.23

    2022年8月11日
    5
  • 修改pycharm镜像源「建议收藏」

    修改pycharm镜像源「建议收藏」国内的镜像源地址:阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学:https://mirrors.bfsu.edu.cn/pypi/web/simple/豆瓣:http://pypi.doubanio.com/simple/清华:https://pypi.tuna.tsinghua.edu.cn/simple/网易:https://mirrors.163.com/pypi/simple/在pycharm中配置镜像源地址:…

    2022年8月27日
    3

发表回复

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

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