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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 批量修改文件后缀名「建议收藏」

    批量修改文件后缀名「建议收藏」在该文件夹下新建一个txt文件,输入:ren*原后缀名*新后缀名保存,将此txt文件的后缀改为.bat,双击运行,ok。说明:ren是rename(重命名)的缩写。第一个参数指定要匹配

    2022年8月2日
    8
  • AndroidTv Home界面实现原理(一)——Leanback 库的使用[通俗易懂]

    AndroidTv Home界面实现原理(一)——Leanback 库的使用[通俗易懂]本篇文章已授权微信公众号dasu_Android(大苏)独家发布接下去应该是梳理一下AndroidTv主界面实现原理及解析的一个系列博客了,大体上的安排是先介绍Google官方提供的L

    2022年7月1日
    22
  • video operation_open vino

    video operation_open vino转载注明出处:http://zjbintsystem.blog.51cto.com/964211/713240从盛夏走到深秋,我们继续DAVINCIDM365-DM368的开发。说来惭愧,人家51CTO热情支持本博客,而本人却一直没有像其他博客之星一样频繁更新博客,心里确实说不过去。管理公司确实很累,有更急的客户的项目要做,我们成功先推出了DM6446-810MHz的核心板( htt

    2022年8月13日
    3
  • cmpp20协议对接「建议收藏」

    cmpp20协议对接「建议收藏」最近公司派任务,让完成cmpp20协议的ps模块。这里总结下期间遇到的问题。1、cmpp20的协议里没有report实体,其实report是和deliver在一起的。deliver里有一个字段Registered_Delivery,0代表deliver,1代表report。同时,当deliver代表report时,MessageContent里面是msgid、Stat、Submit_time、Do…

    2025年7月15日
    3
  • 全国计算机考试python 培训

    全国计算机考试python 培训很多同学想考python的证书,想知道Python有哪些含金量高的证书?一、全国计算机等级考试Python程序语言设计;二、PythonInstitute资格认证初级PCEP;三、PythonInstitute资格认证初级PCEP中级PCAP;四、PythonInstitute资格认证初级PCEP高级PCPP;五、工信部Python技术应用工程师专项技术证书;六、百度技术认证深度学习工程师。现在比较热门的有全国计算机等级考试Python程序语言设计、工信部Python技术应用工程师专项技术证书、百度技

    2025年9月23日
    2
  • oracle 导出时报错EXP-00011:table不存在「建议收藏」

    oracle 导出时报错EXP-00011:table不存在

    2022年3月6日
    71

发表回复

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

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