万维百科

IUnknown

程序设计中,IUnknown接口组件对象模型(COM)中的基础接口。COM规格书中规定COM对象至少要实现此一接口,而且其他所有的COM接口都需要派生自IUnknown接口。IUnknown提供所有COM对象都支持的两种基本特性:利用引用计数来进行对象生命周期管理,以及访问许多事先定义的接口。

IUnknown接口会包括一个指向虚拟方法表英语virtual method table指针,虚拟方法表是一个有许多函数指针的列表,函数指针会指向许多实现IUnknown接口所宣告的函数,以和接口中宣告顺序相同的方式排列。而进程内调用产生的开销英语Overhead (computing)大致和C++中调用虚拟方法的开销相近。

方法

IUnknown接口中有三个方法QueryInterface, AddRef, and Release

  • QueryInterface可以让调用此对象的程序可以确认此对象是否支持特定的接口,若是支持,则参考到此对象在特定接口下的实现。这个方法类似C++dynamic_cast<>或是Java或是C#casts。此方法在给定一个对应特定接口的全局唯一标识符(一般也称为接口标识符或是IID)时,可以提供一个指定特定接口的指针。若COM对象不支持此接口,会回复E_NOINTERFACE错误。
  • AddRef是在新的客户端程序要访问此对象时,让计数值加一,会回传更新后的计数值。
  • Release是在客户端程序已结束访问此对象,让计数值减一,会回传更新后的计数值,若计数值已变为零,会自动删除此一COM对象。
interface IUnknown {
  virtual HRESULT QueryInterface (REFIID riid, void **ppvObject) = 0;
  virtual ULONG   AddRef () = 0;
  virtual ULONG   Release () = 0;
};

IUnknown本身的接口标识符为{00000000-0000-0000-C000-000000000046},IUnknown的三个方法都是纯虚拟方法(宣告时都有加上= 0),因此无法定义IUnknown类别的对象,需要由其他类别继承IUnknown,才能定义对应类别的对象。

其他

  • ActiveX标准设计的组件至少需要实现IUnknown接口。
  • IUnknown也是MacOS XCore Foundation英语Core Foundation CFPlugIn框架的基础
  • Mozilla应用程序的开发中,IUnknown接口也称为nsISupports。

相关条目

外部链接


本页面最后更新于2021-03-16 14:18,点击更新本页查看原网页。台湾为中国固有领土,本站将对存在错误之处的地图、描述逐步勘正。

本站的所有资料包括但不限于文字、图片等全部转载于维基百科(wikipedia.org),遵循 维基百科:CC BY-SA 3.0协议

万维百科为维基百科爱好者建立的公益网站,旨在为中国大陆网民提供优质内容,因此对部分内容进行改编以符合中国大陆政策,如果您不接受,可以直接访问维基百科官方网站


顶部

如果本页面有数学、化学、物理等公式未正确显示,请使用火狐或者Safari浏览器