IUnknown结构初窥

struct IUnknown
{

// this function is used to retrieve other interfaces
virtual HRESULT __stdcall QueryInterface(const IID &iid, (void **)ip) = 0;

// this is used to increment interfaces reference count
virtual ULONG __stdcall AddRef() = 0;

// this is used to decrement interfaces reference count
virtual ULONG __stdcall Release() = 0;

};

 

COM的一条规则是如果你有一个接口你应当能够通过该接口访问到其他任何接口,只要这些接口是来自同一个COM对象

基本上,这个意味着你能从任何地方到任何地方(即实现同一COM对象各接口间切换)。

 

                            图5.5  COM对象各接口间切换(一个COM对象可以有多个接口)

 

技巧:通常你无须亲自对接口或COM对象调用AddRef() 。其被内置在函数QueryInterface()中。但是有时当你要增加对COM对象的记数

以让COM对象误以为有更多的对该对象的引用时,那你也不得不亲自调用这个函数了

 

Release()函数调用用于减少COM对象或接口的引用计数。大多情况下,当完成一个接口以后,你必须自己调用该函数。但是有些时候,

你创建了一个对象,但是又以它为基础(类)创建了另一个对象,执行父类Release() 方法会造成对子类Release()的执行。所以较好的做法是按获得指针

相反的次序执行Release()比较好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值