COM(个人笔记)IUnknown接口

来源:互联网 发布:杨洋星兵报到知乎 编辑:程序博客网 时间:2024/05/16 08:44

COM对象必须具备的两大特性:多接口(QueryInterface),引用计数(AddRef   and  Release)。

由于COM对象都必须实现这三个函数,所以COM定义了一个标准接口IUnknown:

class IUnknown

{

public:

 virtual HRESULT QueryIterface(RIID riid,void**ppObj)=0;

 virtual ULONG AddRef()=0;

 virtual ULONG Release()=0;

};

 

对象可以通过从IUnknown派生实现这三个函数,即:由一个抽象基类派生另一个抽象基类。

例如:

class IDB:public IUnknown

{

public:

 virtual HRESULT Read (short nTable,short nRow,LPWSTR lpszData)=0;

(...)

};

这种方法很简单的将两个vtable合二为一;IDB包含所有IUnknown的函数;IDB的vtable的前三个函数就是IUnknown中的前三个函数。

另一种实现方法是将函数添加到自己的接口处:

 

class IDB{

public:

virtual HRESULT QueryInterface(RIID riid,void ** Obj)=0;

virtual ULONG AddRef()=0;

virtual ULONG Release()=0;

 virtual HRESULT Read (short nTable,short nRow,LPWSTR lpszData)=0;

(...)

};

 

原创粉丝点击