IUnknown

在程序设计中，IUnknown介面是组件对象模型（COM）中的基礎介面。COM規格書中規定COM物件至少要實現此一介面，而且其他所有的COM介面都需要衍生自IUnknown介面。IUnknown提供所有COM物件都支援的兩種基本特性：利用引用计数來進行物件生命周期管理，以及存取許多事先定義的介面。

IUnknown介面會包括一個指向的指標，虛擬方法表是一個有許多函数指针的列表，函数指针會指向許多實現IUnknown介面所宣告的函數，以和介面中宣告順序相同的方式排列。而進程內呼叫產生的大致和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 X中 CFPlugIn框架的基礎
在Mozilla應用程式的開發中，IUnknown介面也稱為nsISupports。

參考資料

相關條目
IDispatch
IFilter
IInspectable
IObjectWithSite
IOleObject

外部連結
 COM in plain C

面向对象的程序设计
微軟API