fbpx
维基百科

IUnknown

程序设计中,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,才能定義對應類別的物件。

其他 编辑

  • ActiveX標準設計的元件至少需要實現IUnknown介面[3]
  • IUnknown也是MacOS XCore Foundation英语Core Foundation CFPlugIn框架的基礎[4]
  • Mozilla應用程式的開發中,IUnknown介面也稱為nsISupports。

參考資料 编辑

  1. ^ . [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

相關條目 编辑

外部連結 编辑

iunknown, 在程序设计中, 介面是组件对象模型, 中的基礎介面, com規格書, 中規定com物件至少要實現此一介面, 而且其他所有的com介面都需要衍生自介面, 提供所有com物件都支援的兩種基本特性, 利用引用计数來進行物件生命周期管理, 以及存取許多事先定義的介面, 介面會包括一個指向虛擬方法表, 英语, virtual, method, table, 的指標, 虛擬方法表是一個有許多函数指针的列表, 函数指针會指向許多實現介面所宣告的函數, 以和介面中宣告順序相同的方式排列, 而進程內呼叫產生的開銷. 在程序设计中 IUnknown介面是组件对象模型 COM 中的基礎介面 COM規格書 1 中規定COM物件至少要實現此一介面 而且其他所有的COM介面都需要衍生自IUnknown介面 IUnknown提供所有COM物件都支援的兩種基本特性 利用引用计数來進行物件生命周期管理 以及存取許多事先定義的介面 IUnknown介面會包括一個指向虛擬方法表 英语 virtual method table 的指標 虛擬方法表是一個有許多函数指针的列表 函数指针會指向許多實現IUnknown介面所宣告的函數 以和介面中宣告順序相同的方式排列 而進程內呼叫產生的開銷 英语 Overhead computing 大致和C 中呼叫虛擬方法的開銷相近 目录 1 方法 2 其他 3 參考資料 4 相關條目 5 外部連結方法 编辑IUnknown介面中有三個方法 QueryInterface AddRef and Release 2 QueryInterface可以讓呼叫此物件的程式可以確認此物件是否支援特定的介面 若是支援 則參考到此物件在特定介面下的實現 這個方法類似C 的 a href E5 9F B7 E8 A1 8C E6 9C 9F E5 9E 8B E6 85 8B E8 A8 8A E6 81 AF html title 執行期型態訊息 dynamic cast a lt gt 或是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介面 3 IUnknown也是MacOS X中Core Foundation 英语 Core Foundation CFPlugIn框架的基礎 4 在Mozilla應用程式的開發中 IUnknown介面也稱為nsISupports 參考資料 编辑 COM specification 2016 12 26 原始内容存档于2016 12 21 IUnknown definition 页面存档备份 存于互联网档案馆 at microsoft com 页面存档备份 存于互联网档案馆 accessed 18 Jan 2008 ActiveX Controls 页面存档备份 存于互联网档案馆 at microsoft com 页面存档备份 存于互联网档案馆 accessed 18 Jan 2008 Plug ins 页面存档备份 存于互联网档案馆 at apple com 页面存档备份 存于互联网档案馆 accessed 18 Sept 2011相關條目 编辑IDispatch IFilter IInspectable IObjectWithSite IOleObject外部連結 编辑COM in plain C 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title IUnknown amp oldid 63131034, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。