COM 物件 和 介面 (轉)

amyz發表於2007-11-25
COM 物件 和 介面 (轉)[@more@]

s and Interfaces

:namespace prefix = o ns = "urn:schemas--com::office" /> 

一個實現一個介面,他的意思就是該物件使用程式碼實現了介面的每個方法

並且為這些通向com庫提供了com的二進位制指標。然後com使這些函式執行在

請求了一個指向該介面的任何客戶端。

 

FEB.2052/com/htm/com_2r5f.htm">Interfaces and Interface Implementations

 

COM 在介面的定義和實現上有根本的差別。一個介面實際上是由一組定義了用法的相

聯絡的函式原型組成,只是他不能夠被實現。這些函式原型就相當於C++中含有純虛擬函式的基類。一個介面定義制定了介面的成員函式、方法、返回型別、他們的引數的數量和型別,這些函式要幹什麼。但是這裡並沒有與介面實現相關的東西。一個介面的實現就是員在一個藉口定義上提供的相關動作的程式碼。

 一個介面的實現就是程式設計師在一個藉口定義上提供的執行相關動作的程式碼。客戶呼叫完全是決定於介面的定義。

 

 

介面實現的一個例項,實際上就是一個指向一組方法的指標,即是指指向一個介面的函式表,該函式表引用了該介面所有方法的實現。

 每個介面,是一個固定的一組方法的集合,在執行時透過globally unique interface ntifier (IID) 來定位。這裡,IID是com支援的globally unique identifier (GUID)的特殊的例項。這樣做就不會產生單一上相同名字、介面的多個版本的COM之間的衝突了。

  • 一個COM介面與C++類是不一樣的;
  • 一個COM介面不是一個物件——他只是簡單的關聯一組函式,是客戶和程式之間通訊的二進位制標準。只要他提供了指向藉口方法的指標,這個物件就可以用任何語言來實現他。;
  • COM介面十強型別的——每個介面有他自己的藉口識別符號;

·  COM介面的不變性——你不能夠用老版本的介面識別符號定義新的版本,介面的IID定義的介面合同是明確的、唯一的

 

 

 繼承在COM 裡並不意味著程式碼的重用。因為介面沒有實現關聯,藉口繼承並意味著程式碼繼承。他的意思僅僅是,一個介面同一個合同關聯,就像C++的純虛擬基類的建立和修改樣,可以新增方法或者更進一步的加強方法的使用。在COM裡沒有選擇性繼承。如果一個介面由另一個介面繼承的話,他就包含了另一個介面定義的所有的方法。

Using and Implementing IUnknown

  COM 為實現和使用物件和物件的內部通訊提供了一個豐富的標準集合。對IUnknown介面的實現和使用的細節,請參見下面主題:。 

 

 

管理實現一個COM物件的方法的三個主要規則:

  1.物件必須要有一個識別符號; 

  2.一個物件例項的介面集合必須是靜態的(static); 

  3.在物件中從任何一個其他的介面查詢此介面都應該成功。

 

透過引用計數來管理物件的生命週期

 使用 AddRef()  //增加引用

  Realase()  //減少引用


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984448/,如需轉載,請註明出處,否則將追究法律責任。

相關文章