IUnknown接口

  COM是组件对象模型,她是继面象对向之后的一种思想,而不是一种简单的实现。  

  通过IDL,很多具体的工作都可以实现她,如VCVB等。  

  一句话:COM是接口(组件)的集合,接口是方法和属性的集合。  

  要了解COM,就得先了解IUnknown接口,IUnknown接口的C++形式的定义如下:  

  interface   IUnknown  

  {  

          virtual   HRESULT   _stdcall   QueryInterface([in]REFIID   iid,[out]void   *   *   ppv)=0;  

          virtual   ULONG   _stdcall   AddRef(void)=0;  

          virtual   ULONG   _stdcall   Release(void)=0;  

  }  

  她实现了“接口查询”和“引用计数”,她是一个纯抽象基类。  

  所有COM   定义的接口都必须从她继承。  

  实现的COM接口都应该遵守一定的原则:  

  1。查询IUnknown接口得到的必须一样。  

  2。接口对称性。  

  3。接口相互性。  

  4。接口传递性。  

  5。时间无关性。  

要学好COM,一定得弄清楚COM的原理。 

如果你学过C++或类似语言的话,这就比较好理解了。在C++里,一个子类可以从父类继承,这样子类可以复用父类的函数和成员。在COM里,一个接口和一个类很相似,一个接口可以从另一个接口继承,但是与C++的区别 是,接口的继承只是继承说明,不继承实现。微软规定了所有的标准接口必须从IUnknown接口“继承”,以获得组件的两个基本能力:引用计数和查询接口。  

一个Free的域名:http://ComDeveloper.126.com,现在放了一位老外写的学习心得。

     IUnknown接口是一个很普通的类或结构,你甚至可以自己写他,只是他有特殊的规定,必须有QueryInterface,AddRef,Relaese方法。可以说他是所有COM类的基类。原始的IUnknown类是一个纯虚类,什么也不能干,用户必须重载并实现他的所有方法,之所以要用IUnknown虚拟类,只是为了接口统一。也就是说所有COM类这三个方法的地址在函数虚拟表中是完全一样的。

     COM中的接口和C++中的类有些是相同的,但是也有一些区别,COM中有一些接口他里面有些函数是微软在出厂时就已经编写好了的,但是,他也提供了一些多余的接口,他只做了定义,但是没有实例化,你可以利用VC编写程序了将他实例化,就可以实现自己要求的功能了,但是你也要编写一个注册程序,至于如何编写要看你利用的接口而定了。

我曾经看到过一套教程,非常好,有生动的例子和循序渐进的说明。最终的结论是,要在Windows平台上实现组件(可独立发布的程序单元)应该是COM现在这种形式。URL为:http://beta.develop.com/com/contents.asp   比较适合于初学者,只需C++的基础,学起来也比较轻松。学完之后,比看任何一本关于COM的书都要理解得好。 以前MS也有人写过类似的文章,就好像是,从组件的概念出发推导出IUnknown的必然,进一步也就是COM的必然。 这是很有意思的。IUnknownCOM的基础,但COM作为组件体系还需要很多很多东西,于是便演变成今天这么复杂的一项技术。

(向原帖所有者致敬。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值