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


相关推荐

  • sql 左连接,内连接 的写法「建议收藏」

    左连接的含义:使用LEFTJOIN关键字,会从左表那里返回所有的行,即使在右表中没有匹配的行。1)左连接selecta.*,b.*fromtable1aleftjointable2bona.id=b.parent_id2)内连接selecta.*,b.*f…

    2022年4月13日
    45
  • 迁移学习与代码举例

    迁移学习出现背景在有监督的机器学习和尤其是深度学习的场景应用中,需要大量的标注数据。标注数据是一项枯燥无味且花费巨大的任务,关键是现实场景中,往往无法标注足够的数据。而且模型的训练是极其耗时的。因此迁移学习营运而生。传统机器学习(主要指监督学习)基于同分布假设需要大量标注数据然而实际使用过程中不同数据集可能存在一些问题,比如数据分布差异标注数据过期训练数据过期,也就是好不容易标定…

    2022年4月15日
    115
  • k8s(十二)安全认证「建议收藏」

    k8s(十二)安全认证「建议收藏」k8s访问控制概述Role只能对命名空间的资源进行授权,需要指定namespaceClusterRole可以对集群范围内的资源、跨namespace的范围资源、非资源类型进行授权RoleBinding可以将同一namespace中的subject对象绑定到某个Role下,则此Subject具有该Role定义的权限ClusterRoleBinding在整个集群级别和所有namespaces将特定的subject与ClusterRole绑定,授予权限虽然authorization-clusterrole是一个集

    2022年8月11日
    2
  • 安装svn 汉化包 也不能设置中文[通俗易懂]

    (以下为亲测!)汉化包地址:https://osdn.net/projects/tortoisesvn/storage进入地址之后:选择对应版本–>>LanguagePacks–>>选择中文包问题:已经安装svn汉化包,但是不能设置为中文.解决:确保汉化包版本对应svn版本. 如果汉化包版本已经对应svn版本,则把Language文件夹里面东西全部删除,然后再次安装汉化包….

    2022年4月8日
    78
  • 传感器尺寸、像素、DPI分辨率、英寸、毫米的关系

    传感器尺寸、像素、DPI分辨率、英寸、毫米的关系虽然网上有很多这种资料,但是太过于复杂,每个人的说法都不一样,看的让人云里雾里的,我总结了一下,不知道对不对!1.1英寸=25.4mm2.传感器尺寸:传感器的尺寸是指传感器的大小,一般描述大小有两种形式,以IMX386感光元件为例,其传感器尺寸1/2.9英寸,是指传感器对角线为1/2.9英寸;还可以描述成传感器尺寸4.97mm×6.2mm,是指水平(竖直)长(宽)为4.97(6.2)m…

    2022年6月13日
    54
  • 注意 Laravel 清除缓存 php artisan cache:clear 的一个坑

    注意 Laravel 清除缓存 php artisan cache:clear 的一个坑

    2021年10月26日
    84

发表回复

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

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