com关于IUnknown接口

Posted yutingliuyl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了com关于IUnknown接口相关的知识,希望对你有一定的参考价值。

com定义的每个接口都必须从IUnknown继承过来,主要原因是IUnknown接口提供了两个很重要的特性:生存期控制和接口查询。

客户程序仅仅能通过接口与com对象进行通信。尽管客户程序能够无论对象内部的实现细节。但它要控制对象的存在与否。

假设客户还要继续对对象进行操作。则它必须保证对象能一直存在于内存中;假设客户对对象的操作已经完毕。以后也不再须要该对象了,则它必须及时地把对象释放掉。以提高资源的利用率。IUnknown引入了“引用计数”方法,能够有效得控制对象的生存周期。

还有一方面。假设一个com对象实现了多个接口。在初始时刻。客户程序不太可能得到该对象全部的接口指针,它仅仅会拥有一个接口指针。假设客户程序须要其它的指针。那么它怎样通过这个接口指针获得还有一个接口指针呢?IUnknown使用了接口查询(”QueryInterface“)的方法来完毕接口之间的条状。

以下是IUnknown的定义:

class IUnknown
{
	public:
		virtual HRESULT _stdcall QueryInterface(const IID& iid,void** ppv) = 0;
		virtual ULONG _stdcall AddRef() = 0;
		vittual ULONG _stdcall Release() = 0;
};
当中,QueryInterface用于查询com对象的其它接口,AddRef和Release用于对引用计数进行操作。

以上是关于com关于IUnknown接口的主要内容,如果未能解决你的问题,请参考以下文章

继承接口 & IUnknown , IDispatch 方法定义

分布式系统架构-samgr/source系统服务开发框架基础代码iunknown.c讲解

DirectX11--ComPtr智能指针

COM 中的数据类型

COM技术内幕(笔记)

为啥我的 IUnknown 释放函数会阻塞我的子线程?