com組件和一般dll的區(qū)別.doc_第1頁
com組件和一般dll的區(qū)別.doc_第2頁
com組件和一般dll的區(qū)別.doc_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

com組件和一般DLL的區(qū)別 這陣子在想一個需要利用com組件的小程序怎么做,突然想起上次去面試的時候考官問過AutoCAD開發(fā)時為什么要利用com,而不采用一般的DLL呢?到Google上查了一下,許多人也問了一樣的問題:)用com來寫程序要比普通的DLL麻煩一些,但是帶來的好處也大很多,尤其是在開發(fā)像AutoCAD這樣大型軟件的時候,需要跨區(qū)域來協(xié)同工作。 “學(xué)習(xí)COM,首先要知道COM的目的是什么,它解決了一個什么樣的問題,在此基礎(chǔ)上,MS提供了各式各樣的可擴展的COM服務(wù),COM編程接口。這些服務(wù)和接口恐怕一個程序員一輩子都不可能通曉,因為發(fā)展是如此之快。大家也沒有必要通曉這些接口,就象對待大量的WINAPI的態(tài)度,用到時再查幫助。 COM的各種努力都是在規(guī)定了一種二進制交互的協(xié)議。說起來簡單,做起來相當復(fù)雜,要使使用不同語言編寫的客戶能夠使用任意語言編寫的服務(wù)程序談何容易!這里說語言還是把問題簡單化了,因為每種語言還有各式各樣的編譯器,不同編譯器出來的二進制代碼如何交互? 就拿DLL來說,DLL是對靜態(tài)連接的一種改進,帶來了更細的開發(fā)分工,也帶來了很多問題,其中就有二進制如何交互的問題。這個問題當DLL輸出類時更加突出。COM為解決此問題提出了極負創(chuàng)意的解決方案,不僅如此,更進一步引申,提出了如何跨網(wǎng)絡(luò)的交互。然后,針對internet服務(wù)器的開發(fā)提出COM+。COM體系中融合了多種經(jīng)典的設(shè)計模式,可以說是一種更加精干的C+。 COM博大精深,若干大師仍須半年的mental fog, 方能有豁然開朗之時。我們這些晚輩,還需多加修煉才對,但決不止是COM。1、COM組件以接口對功能分類,便于組織;DLL特別是大的DLL,函數(shù)一大堆,難以組織; 2、COM組件便于升級維護,功能擴充,只需添加接口就行;DLL升級困難,函數(shù)不能隨意改變; 3、COM創(chuàng)建調(diào)用有很好的安全性,DLL沒有;4、COM組件可輕松實現(xiàn)進程間調(diào)用,DLL很困難;5、COM組件可輕松實現(xiàn)分布式調(diào)用,DLL不可能;6、COM組件具有封裝、繼承、多態(tài)的面向?qū)ο筇卣鳎珼LL只有封裝;7、在COM組件的基礎(chǔ)上實現(xiàn)了大量功能:ActiveX,OLE等;ActiveX、OLE、COM、OCX、DLL之間的區(qū)別熟悉面向?qū)ο缶幊毯途W(wǎng)絡(luò)編程的人一定對ActiveX、OLE和 COM/DCOM這些概念不會陌生,但是它們之間究竟是什么樣的關(guān)系,對許多人還是比較模糊的。在具體介紹它們的關(guān)系之間,我們還是先明確組件 (Component)和對象(Object)之間的區(qū)別。組件是一個可重用的模塊,它是由一組處理過程、數(shù)據(jù)封裝和用戶接口組成的業(yè)務(wù)對象(Rules Object)。組件看起來像對象,但不符合對象的學(xué)術(shù)定義。它們的主要區(qū)別是: 1)組件可以在另一個稱為容器(有時也稱為承載者或宿主)的應(yīng)用程序中使用,也可以作為獨立過程使用;2)組件可以由一個類構(gòu)成,也可以由多個類組成,或者是一個完整的應(yīng)用程序; 3)組件為模塊重用,而對象為代碼重用?,F(xiàn)在,比較流行的組件模型有COM(Component Object Module,對象組件模型)/DCOM( Distributed COM,分布式對象組件模型)和CORBA(Common Object Request Broker Architecture,公共對象請求代理體系結(jié)構(gòu))。到這里,已經(jīng)出現(xiàn)了與本文相關(guān)的主題COM,而CORBA與本文無關(guān),就不作介紹。之所以從組件 與對象的區(qū)別說起,是想讓大家明確COM和CORBA是處在整個體系結(jié)構(gòu)的最底層,如果暫時對此還不能理解,不妨繼續(xù)往下看,最后在回過頭看一看就自然明白了?,F(xiàn)在開始闡述ActiveX、OLE 和COM的關(guān)系。首先,讓大家有一個總體的概念,從時間的角度講,OLE是最早出現(xiàn)的,然后是COM和ActiveX;從體系結(jié)構(gòu)角度講,OLE和 ActiveX是建立在 COM之上的,所以COM是基礎(chǔ);單從名稱角度講,OLE、ActiveX是兩個商標名稱,而COM則是一個純技術(shù)名詞,這也是大家更多的聽說 ActiveX和OLE的原因。既然OLE是最早出現(xiàn)的,那么就從OLE說起,自從Windows操作系統(tǒng)流行以來,“剪貼板”( Clipboard)首先解決了不同程序間的通信問題(由剪貼板作為數(shù)據(jù)交換中心,進行復(fù)制、粘貼的操作),但是剪貼板傳遞的都是“死”數(shù)據(jù),應(yīng)用程序開發(fā)者得自行編寫、解析數(shù)據(jù)格式的代碼,于是動態(tài)數(shù)據(jù)交換(Dynamic Data Exchange,DDE)的通信協(xié)定應(yīng)運而生,它可以讓應(yīng)用程序之間自動獲取彼此的最新數(shù)據(jù),但是,解決彼此之間的“數(shù)據(jù)格式”轉(zhuǎn)換仍然是程序員沉重的負擔(dān)。對象的鏈接與嵌入(Object Linking and Embedded,OLE)的誕生把原來應(yīng)用程序的數(shù)據(jù)交換提高到“對象交換”,這樣程序間不但獲得數(shù)據(jù)也同樣獲得彼此的應(yīng)用程序?qū)ο?,并且可以直接使用彼此的?shù)據(jù)內(nèi)容,其實OLE是Microsoft的復(fù)合文檔技術(shù),它的最初版本只是瞄準復(fù)合文檔,但在后續(xù)版本OLE2中,導(dǎo)入了COM。由此可見,COM是應(yīng)OLE的需求而誕生的,所以雖然COM是OLE的基礎(chǔ),但OLE的產(chǎn)生卻在COM之前。COM的基本出發(fā)點是,讓某個軟件通過一個通用的機構(gòu)為另一個軟件提供服務(wù)。COM是應(yīng)OLE 的需求而誕生,但它的第一個使用者卻是OLE2,所以COM與復(fù)合文檔間并沒有多大的關(guān)系,實際上,后來COM就作為與復(fù)合文檔完全無關(guān)的技術(shù),開始被廣泛應(yīng)用。這樣一來, Microsoft就開始“染指”通用平臺技術(shù)。但是COM并不是產(chǎn)品,它需要一個商標名稱。而那時Microsoft的市場專家們已經(jīng)選用了OLE作為 商標名稱,所以使用COM技術(shù)的都開始貼上了OLE的標簽。雖然這些技術(shù)中的絕大多數(shù)與復(fù)合文檔沒有關(guān)系。Microsoft的這一做法讓人產(chǎn)生這樣一個誤解OLE是僅指復(fù)合文檔呢?還是不單單指復(fù) 合文檔?其實OLE是COM的商標名稱,自然不僅僅指復(fù)合文檔。但Microsoft自己恐怕無法解釋清楚,這要花費相當?shù)木蜁r間。 于是,隨著Internet的發(fā)展,在1996年春,Microsoft改變了主意,選擇ActiveX作為新的商標名稱。ActiveX是指寬松定義 的、基于COM的技術(shù)集合,而OLE仍然僅指復(fù)合文檔。當然, ActiveX最核心的技術(shù)還是COM。ActiveX和OLE的最大不同在于,OLE針對的是桌面上應(yīng)用軟件和文件之間的集成,而ActiveX則以提 供進一步的網(wǎng)絡(luò)應(yīng)用與用戶交互為主。到這里,大家應(yīng)該對ActiveX、OLE和COM三者的關(guān)系有了一個比較明確的認識,COM才是最根本的核心技術(shù), 所以下面的重點COM。讓對象模型完全獨立于編程語言,這是一個非常新奇的思想。這一點從C+和Java的對象概念上,我們就能有所了解。但所謂COM 對象究竟是什么呢?為了便于理解,可以把COM看作是某種(軟件)打包技術(shù),即把它看作是軟件的不同部分,按照一定的面向?qū)ο蟮男问?,組合成可以交互的過 程和以組支持庫。COM對象可以用C+、Java和VB等任意一種語言編寫,并可以用DLL或作為不同過程工作的執(zhí)行文件的形式來實現(xiàn)。使用COM對象 的瀏覽器,無需關(guān)心對象是用什么語言寫的,也無須關(guān)心它是以DLL還是以另外的過程來執(zhí)行的。從瀏覽器端看,無任何區(qū)別。這樣一個通用的處理技巧非常有 用。例如,由用戶協(xié)調(diào)運行的兩個應(yīng)用,可以將它們的共同作業(yè)部分作為COM對象間的交互來實現(xiàn)(當然,現(xiàn)在的OLE復(fù)合文檔也能做到)。為在瀏覽器中執(zhí)行 從Web服務(wù)器下載的代碼,瀏覽器可把它看作是COM對象,也就是說,COM技術(shù)也是一種打包可下載代碼的標準方法(ActiveX控件就是執(zhí)行這種功能的)。甚至連應(yīng)用與本機OS進行交互的方法也可以用COM來指定,例如在Windows和Windows NT中用的是新API,多數(shù)是作為COM對象來定義的。可見,COM雖然起源于復(fù)合文檔,但卻可有效地適用于許多軟件問題,它畢竟是處在底層的基礎(chǔ)技術(shù)。 用一句話來說,COM是獨立于語言的組件體系結(jié)構(gòu),可以讓組件間相互通信。隨著計算機網(wǎng)絡(luò)的發(fā)展,COM進一步發(fā)展為分布式組件對象模型,這就是 DCOM,它類似于CORBA的ORB,本文對此將不再做進一步的闡述。通過上面的講述相信大家一定對ActiveX、OLE和COM/DCOM的關(guān)系有 了一個清楚的了解。 使用Windows的人對于ActiveX控制一定不會陌生,它提供了一種類似于DLL動態(tài)鏈接庫的調(diào)用,不過它與DLL的唯一區(qū)別就是ActiveX不注冊不能被系統(tǒng)識別并使用。那么,當我們得到一個ActiveX沒有被正確安裝且不能使用的消息后,又要安裝ActiveX怎么辦呢?. Regsvr32程序法在Windows的System文件夾下有一個regsvr32.exe的程序,它就是Windows自己帶的ActiveX注冊 和反注冊工具。利用它也能夠非常方便地注冊ActiveX控件,它的用法為:regsvr32/ DLLNAME,其中DLLNAME為ActiveX控件文件名,建議在安裝前拷貝到System文件夾下參數(shù)有如下意義:/ 反注冊控件 / 不管注冊成功與否,均不顯示提示框/ 控制臺輸出/ 跳過控件的選項進行安裝 (與注冊不同) / 不注冊控件,此選項必須與/ 選項一起使用例如筆者要注冊amovie.ocx控件,則打入 regsvr32 amovie.ocx即可,要反注冊它時只需使用 regsvr32 / amovie.ocx就行了。.注冊表法所謂注冊ActiveX,無非是將一些信息記錄在Windows的注冊表中,如SchockWave Flash Object控件,我們可以運行Regedit.exe注冊表編輯程序,利用關(guān)鍵字進行搜索,然后把搜索得到后的注冊表導(dǎo)出為一注冊表文件,再將其相應(yīng)的ActiveX文件拷貝到Windows的System文件夾(一般ActiveX的文件名為OCX,安裝在Windows的System文件夾 內(nèi))下,最后在要安裝ActiveX的機器上雙擊導(dǎo)入剛才導(dǎo)出的注冊表文件即可完成安裝。 ActiveX、OLE和COM都是微軟的一些技術(shù)標準。Ole比較老后來發(fā)展成ActiveX,再后來發(fā)展成為COM OCX,DLL是擴展名。ActiveX有兩種擴展名OCX和DLL。實際上你可以把它們的擴展名字調(diào)換。 COM作為ActiveX的更新技術(shù),擴展名也有可能是DLL文件還有可能是動態(tài)鏈接庫。主要是裝載

溫馨提示

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

評論

0/150

提交評論