一個對象實現一個接口,他的意思就是該對象使用代碼實現了接口的每個方法
并且為這些函數通向
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()?? //減少引用
posted on 2007-03-13 13:57
jay 閱讀(308)
評論(0) 編輯 收藏 引用 所屬分類:
ATL