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

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

方法

IUnknown介面中有三个方法QueryInterface, AddRef, and Release[2]

  • 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,才能定义对应类别的物件。

其他

参考资料

  1. ^ COM specification. [2016-12-26]. (原始内容存档于2016-12-21). 
  2. ^ IUnknown definition页面存档备份,存于互联网档案馆) at microsoft.com页面存档备份,存于互联网档案馆); accessed 18-Jan-2008
  3. ^ ActiveX Controls页面存档备份,存于互联网档案馆) at microsoft.com页面存档备份,存于互联网档案馆); accessed 18-Jan-2008
  4. ^ Plug-ins页面存档备份,存于互联网档案馆) at apple.com页面存档备份,存于互联网档案馆); accessed 18-Sept-2011

相关条目

外部链接