http://www.wangchao.net.cn/bbsdetail_30489.htmlCOM Objects and Interfaces
一個對象實現一個介面,他的意思就是該對象使用代碼實現了介面的每個方法
並且為這些函數通向com庫提供了com的二進位指標。然後com使這些函數運行在
請求了一個指向該介面的任何用戶端。
Interfaces and Interface Implementations
COM 在介面的定義和實現上有根本的差別。一個介面實際上是由一組定義了用法的相
聯絡的函數原型組成,只是他不能夠被實現。這些函數原型就相當於C++中含有純虛擬函數的基類。一個介面定義制定了介面的成員函數、調用方法、傳回型別、他們的參數的數量和類型,這些函數要幹什麼。但是這裡並沒有與介面實現相關的東西。一個介面的實現就是程式員在一個借口定義上提供的執行相關動作的代碼。
一個介面的實現就是程式員在一個借口定義上提供的執行相關動作的代碼。客戶調用完全是決定於介面的定義。
Interface Pointers and Interfaces
介面實現的一個執行個體,實際上就是一個指向一組方法的指標,即是指指向一個介面的函數表,該函數表引用了該介面所有方法的實現。
每個介面,是一個固定的一組方法的集合,在運行時通過globally unique interface identifier (IID) 來定位。這裡,IID是com支援的globally unique identifier (GUID)的特殊的執行個體。這樣做就不會產生單一系統上相同名字、介面的多個版本的COM之間的衝突了。
一個COM介面與C++類是不一樣的;
一個COM介面不是一個對象——他只是簡單的關聯一組函數,是客戶和程式之間通訊的二進位標準。只要他提供了指向借口方法的指標,這個對象就可以用任何語言來實現他。;
COM介面十強型別的——每個介面有他自己的借口標識符;
· COM介面的不變性——你不能夠用老版本的介面標識符定義新的版本,介面的IID定義的介面合約是明確的、唯一的。
IUnknown and Interface Inheritance
繼承在COM 裡並不意味著代碼的重用。因為介面沒有實現關聯,借口繼承並意味著代碼繼承。他的意思僅僅是,一個介面同一個合約關聯,就像C++的純虛擬基類的建立和修改樣,可以添加方法或者更進一步的加強方法的使用。在COM裡沒有選擇性繼承。如果一個介面由另一個介面繼承的話,他就包含了另一個介面定義的所有的方法。
Using and Implementing IUnknown
COM 為實現和使用對象和對象的內部通訊提供了一個豐富的標準集合。對IUnknown介面的實現和使用的細節,請參見下面主題:QueryInterface: Navigating in an Object。
Rules for Implementing QueryInterface
管理實現一個COM對象的IUnknown::QueryInterface方法的三個主要規則:
1.對象必須要有一個標識符;
2.一個對象執行個體的介面集合必須是靜態(static);
3.在對象中從任何一個其他的介面查詢此介面都應該成功。
通過引用計數來管理對象的生命週期
使用 AddRef() //增加引用
Realase() //減少引用(王朝網路 wangchao.net.cn)
-