在程式設計中,IUnknown介面是元件物件模型(COM)中的基礎介面。COM規格書[1]中規定COM物件至少要實現此一介面,而且其他所有的COM介面都需要衍生自IUnknown介面。IUnknown提供所有COM物件都支援的兩種基本特性:利用參照計數來進行物件生命周期管理,以及存取許多事先定義的介面。
IUnknown介面會包括一個指向虛擬方法表的指標,虛擬方法表是一個有許多函數指標的列表,函數指標會指向許多實現IUnknown介面所宣告的函數,以和介面中宣告順序相同的方式排列。而進程內呼叫產生的開銷大致和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,才能定義對應類別的物件。
其他
參考資料
相關條目
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.