com組件對象模型_第1頁
com組件對象模型_第2頁
com組件對象模型_第3頁
com組件對象模型_第4頁
com組件對象模型_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 5.4 COM編程技術編程技術COM(Component Object Model,組件對,組件對象模型)。作為一個真正意義上的組件,象模型)。作為一個真正意義上的組件,應具備如下特征:應具備如下特征:實現了對開發(fā)語言的封裝。實現了對開發(fā)語言的封裝。以二進制形式發(fā)布。以二進制形式發(fā)布。能夠在不妨礙已有用戶的情況下被升級。能夠在不妨礙已有用戶的情況下被升級。在網絡上的位置必須能夠被透明的重新分在網絡上的位置必須能夠被透明的重新分配。配。 5.4.1 COM對象對象 COM是面向對象的軟件模型,在是面向對象的軟件模型,在COM中,中,對象是某類組件的一個實例。對象是某類組件的一個實例。 COM對

2、象的應用者對象的應用者應用程序則稱為應用程序則稱為客戶??蛻簟?每個每個COM組件對象都擁有一個以上的接組件對象都擁有一個以上的接口,口,COM對象可通過一個或多個接口與對象可通過一個或多個接口與客戶進行交互??蛻暨M行交互。 在在COM模型中,由模型中,由COM對象實現的每一對象實現的每一個接口,都分別由一個個接口,都分別由一個128位的二進制全位的二進制全局統(tǒng)一標識符局統(tǒng)一標識符GUID(Globally Unique IDentifier)來標識。)來標識。 GUID是一個隨機數,并不絕對保證唯一性,是一個隨機數,并不絕對保證唯一性,但發(fā)生標識符相重的可能性非常小。從理但發(fā)生標識符相重的可

3、能性非常小。從理論上講,如果一臺機器每秒產生論上講,如果一臺機器每秒產生10 000 000個個GUID,則可保證(概率意義上),則可保證(概率意義上)3240年不重復。年不重復。 下面是一個下面是一個GUID的例子。的例子。54BF6567-1007-11D1-B0AA444553540000在在C/C+中可以用這樣的結構來描述:中可以用這樣的結構來描述: Typedef struct_GUID DWORD Data1; WORD Data2; WORD Data3; BYTE Data48; GUID于是前面的于是前面的GUID例子可以定義為例子可以定義為extern C const GU

4、ID CLSID_MYSPELLCHECKER= 0 x54BF6567,0 x 1007,0 x 11D1,0 x B0,0 x AA,0 x 44,0 x 45,0 x 53,0 x54,0 x00,0 x00COM庫提供的庫提供的API函數可產生函數可產生GUID:HRESULT CoCreateGuid(GUID *pguid););如果如果GUID創(chuàng)建成功,則函數返回創(chuàng)建成功,則函數返回S_OK,并且,并且pguid將指向所得到將指向所得到的的GUID值。值。5.4.2 COM接口接口1從從API到到COM接口接口平面型的平面型的API接口存在以下一些問題:接口存在以下一些問題:當當

5、API函數非常多時,使用非常不方便,函數非常多時,使用非常不方便,需要對函數進行組織。需要對函數進行組織。API函數需要標準化,按照統(tǒng)一的調用方函數需要標準化,按照統(tǒng)一的調用方式進行處理,以適應不同的語言編程實現。式進行處理,以適應不同的語言編程實現。 圖5.8 應用程序A和B通過API接口共用一個字典組件應用A或組件AAPI字典組件應用B或組件B2COM接口的定義和標識接口的定義和標識圖圖5.9 COM5.9 COM接口結構接口結構指針指針對對象象實實現現接口指針接口指針pvtablepvtablevtablevtable指針函數指針函數1 1指針函數指針函數1 1指針函數指針函數1 13C

6、OM接口的內存模型接口的內存模型COM對象往往有自己的屬性數據,這些屬對象往往有自己的屬性數據,這些屬性數據反映了對象的狀態(tài),也正是通過這性數據反映了對象的狀態(tài),也正是通過這些屬性數據,才反映了對象與對象的不同。些屬性數據,才反映了對象與對象的不同。4COM接口的特點接口的特點二進制特性二進制特性接口的不變性接口的不變性繼承性(擴展性)繼承性(擴展性)多態(tài)性多態(tài)性運行過程中的多態(tài)性運行過程中的多態(tài)性5.4.3 IUnknown接口接口 COM定義的每一個接口都必須從定義的每一個接口都必須從IUnknown繼承過來,其原因在于繼承過來,其原因在于IUnknown接口提供接口提供了兩個非常重要的特

7、性:了兩個非常重要的特性:生存期控制;生存期控制;接口查詢接口查詢 ;客戶需要控制對象客戶需要控制對象 如果繼續(xù)對對象進行操作,則它必須保證對如果繼續(xù)對對象進行操作,則它必須保證對象能一直存在于內存中;如果操作已經完成,象能一直存在于內存中;如果操作已經完成,以后也不再需要該對象了,則它必須及時地以后也不再需要該對象了,則它必須及時地把對象釋放掉,以提高資源的利用率把對象釋放掉,以提高資源的利用率 。首先來看一下首先來看一下IUnknown的定義(的定義(IDL):): interface IUnknown HRESULT QueryInterface(inREFIID iid,out voi

8、d * * ppv);); ULONG AddRef(void);); ULONG Release(void);); QueryInterface用于查詢用于查詢COM對象的其他接口指針,對象的其他接口指針,AddRef和和Release用于對引用計數進行操作用于對引用計數進行操作 1引用計數引用計數 COM采用了采用了“引用計數引用計數”技術來解決內存技術來解決內存管理的問題,決定是否繼續(xù)生存下去。管理的問題,決定是否繼續(xù)生存下去?!耙糜嫈涤糜嫈怠笔且粋€數值,該數值的含義為有多是一個數值,該數值的含義為有多少個有效指針在引用該少個有效指針在引用該COM對象。對象。 當客戶得到了一個指向該對象的接口指針時,當客戶得到了一個指向該對象的接口指針時,引用計數值增引用計數值增1;當客戶用完了該接口指針;當客戶用完了該接口指針后,引用計數減后,引用計數減1。 當引用計數減到當引用計數減到0時,時,COM對象就應該把自對象就應該把自己從內存中清除掉。己從內存中清除掉。 2引用計數的實現引用計數的實現問題:在什么層次上進行引用計數呢?問題:在什么層次上進行引用計數呢?按照按照COM規(guī)范,一個規(guī)范,一個C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論