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


相关推荐

  • js nextSibling属性和previousSibling属性

    js nextSibling属性和previousSibling属性   1:nextSibling属性       该属性表示当前节点的下一个节点(其后的节点与当前节点同属一个级别);如果其后没有与其同级的节点,则返回null。      需要特别注意的是:该属性在不同的浏览器中的执行结果并不都相同,见下面例示:     先来看一个例子: [javascript] viewplain copy&lt;body&gt;  &lt;div&gt;  &lt;…

    2022年7月15日
    17
  • CIFAR-10 数据集「建议收藏」

    CIFAR-10 数据集「建议收藏」CIFAR-10数据集简介CIFAR-10是由Hinton的学生AlexKrizhevsky和IlyaSutskever整理的一个用于识别普适物体的小型数据集。一共包含10个类别的RGB彩色图片:飞机(a叩lane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog)、蛙类(frog)、马(hor…

    2022年4月19日
    41
  • java接口中方法、属性修饰符详解「建议收藏」

    java接口中方法、属性修饰符详解「建议收藏」java接口的修饰符:abstract(inteeface本身就是抽象的,加不加abstract都一样)。接口中字段的修饰符:public static final(默认不写)如下解释:public: 使接口的实现类可以使用这个常量static:接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量。…

    2022年6月13日
    43
  • endnote转化成纯文本后_EndNote X7如何去掉域代码生成纯文本文件

    endnote转化成纯文本后_EndNote X7如何去掉域代码生成纯文本文件满意答案czpunk2016.08.17采纳率:58%等级:9已帮助:2963人现在很多杂志都要求作者提供电子文稿。格式化后的文稿含有大量域代码,有可能与杂志社的软件不兼容,因此提交前需要去掉文稿里的域代码。方法是从Word的工具栏里进入“EndNote7.0”子菜单选择点击“RemoveFieldCodes”,出现一个提示框告诉你“该操作将创建一个新的去掉了所有域代码的Word文档,…

    2022年5月28日
    55
  • 最大子段和

    最大子段和

    2021年7月8日
    112
  • 3分钟学习下射频放大器基础知识

    其实很多筒子都想看放大器相关的东西,射频君一直很头疼这个题目。毕竟是比较复杂的器件,其实写起来也是很困难的。今天就来跟大家唠唠放大器相关的基础知识,抛砖引玉哈。射频放大器,根本上是我们射频系统中的正反馈系统,一般位于发射链路上。由于考虑无线传输的链路衰减,发射端需要辐射足够大的功率才能获得比较远的通信距离。因此,射频放大器主要负责将功率放大到足够大后馈送到天线上辐射出去,是通信系统中的核心器件…

    2022年4月6日
    38

发表回复

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

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