2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

com組件和一般dll的區(qū)別

 imelee 2017-09-25

1.動(dòng)態(tài)鏈接庫(kù)與靜態(tài)鏈接庫(kù)的區(qū)別。

   1.1 靜態(tài)鏈接庫(kù)作為代碼的一部分,在編譯時(shí)被鏈接。

    1.2 動(dòng)態(tài)鏈接庫(kù)有兩種使用方式:

      一種是靜態(tài)加載,即在應(yīng)用程序啟動(dòng)時(shí)被加載;

      一種是動(dòng)態(tài)加載,即是該動(dòng)態(tài)鏈接庫(kù)在被使用時(shí)才被應(yīng)用程序加載。

2.動(dòng)態(tài)鏈接庫(kù)和COM組件的區(qū)別

     2.1 動(dòng)態(tài)鏈接庫(kù)的表現(xiàn)形式只能是dll[變態(tài)該名的除外], COM組件的表現(xiàn)形式可以是dll也可以是exe。

     注:其實(shí)字體、驅(qū)動(dòng)等也算是動(dòng)態(tài)鏈接庫(kù)的一種,這里略去...

     2.2 動(dòng)態(tài)鏈接庫(kù)的生成和編譯器及系統(tǒng)相關(guān),在Windows/Linux下系統(tǒng),需要分別編譯才能使用。

          COM組件是二進(jìn)制編碼,在Windows和Linux下可以直接使用,不需要重新編譯。

     2.3 COM組件是按照COM規(guī)范實(shí)現(xiàn)的dll或者exe;動(dòng)態(tài)鏈接庫(kù)是一個(gè)可以導(dǎo)出函數(shù)的函數(shù)集合。

     2.4 動(dòng)態(tài)鏈接庫(kù)只能在本機(jī)被調(diào)用,COM組件支持分布式使用。


com英文為Component Object Model組件對(duì)象模型是微軟生產(chǎn)軟件組件的標(biāo)準(zhǔn)。
它是構(gòu)造二進(jìn)制兼容軟件組件的規(guī)范不管組件應(yīng)用何種語言編寫只要遵循com規(guī)范就可
以相互直接通信。提出com規(guī)范主要是為了滿足  
1.程序的快速開發(fā)可以將一個(gè)大型的工程分成若干個(gè)com組件同時(shí)開發(fā)。  
2.可以動(dòng)態(tài)的插入或卸載com組件。  
3.可以隱藏或封裝com組件內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。 com組件可以由不同的語言進(jìn)行編寫?yīng)Φ?br> com組件之間的通信是通過組件的接口來實(shí)現(xiàn)的com組件接口的實(shí)現(xiàn)是統(tǒng)一的它采用
的是虛擬函數(shù)表VTBL形式。虛擬函數(shù)表中包含了組件函數(shù)的一組指針我們可以通過
這組指針來獲取我們想要通信的組件函數(shù)的內(nèi)存地址。  
dll動(dòng)態(tài)鏈接庫(kù)是包含函數(shù)和數(shù)據(jù)的模塊的集合。它可以導(dǎo)出數(shù)據(jù)也可以導(dǎo)出函數(shù)以供
其它的dll調(diào)用。dll的加載可以通過靜態(tài)鏈接和動(dòng)態(tài)鏈接兩種方式。 
1.靜態(tài)鏈接時(shí)將所要鏈接的dll模塊以二進(jìn)制的形式編譯進(jìn)其他模塊。  
2.動(dòng)態(tài)鏈接指調(diào)用模塊在運(yùn)行時(shí)加載DLL使用LoadLibrary函數(shù)或LoadLibraryEx函
數(shù)將dll 加載到進(jìn)程的地址空間并調(diào)用GetProcAddress函數(shù)以獲取導(dǎo)出的 DLL 函數(shù)
的地址。  
動(dòng)態(tài)加載dll的優(yōu)點(diǎn)  
1.DLL可節(jié)省內(nèi)存并減少交換。通過在內(nèi)存中共享 DLL 的單個(gè)副本多個(gè)進(jìn)程可以同時(shí)使

用一個(gè)DLL。相比之下對(duì)于使用靜態(tài)鏈接庫(kù)構(gòu)建的每一個(gè)應(yīng)用程序Windows 都要在
內(nèi)存中為其加載庫(kù)代碼的一個(gè)副本。  
2.DLL 可節(jié)省磁盤空間。 多個(gè)應(yīng)用程序可以共享磁盤上的一個(gè) DLL 副本。相比之下使
用靜態(tài) 鏈接庫(kù)構(gòu)建的每一個(gè)應(yīng)用程序都需要讓鏈接到程序文件映像的庫(kù)代碼作為一個(gè)單獨(dú)
的專用副本。  
dll與com的關(guān)系com是一種規(guī)范按照是com規(guī)范實(shí)現(xiàn)的dll可以被視為com組件
例如我們用mfc建立的Active X控件工程其中的接口封裝是靠idl描述的所以可以視為
com組件。而且從上面關(guān)于com和dll的說明可以看出com組件的接口是一組具有特定
規(guī)范的函數(shù)所以com組件可以別視為dll但dll不一定是com組件。  
com和DLL最大的區(qū)別就是: dll是以函數(shù)集合的方式來調(diào)用的是編程語言相關(guān)的象VC必
須加上extern "C"...而COM是以interface的方式提供給用戶使用的是一種二進(jìn)制的調(diào)
用規(guī)范,是與編程語言無關(guān)的,它使用idl接口定義語言來描述自己使用類繼承來實(shí)現(xiàn)自己的
功能和方法.DLL只有DLL一種形勢(shì),里面可任意定義函數(shù)無限制,只能運(yùn)行在本機(jī)上 而
COM 有DLL和EXE兩種存在形勢(shì): COM所在的DLL中必須導(dǎo)出四個(gè)函數(shù):  
dllgetobjectclass, dllregisterserver, dllunregisterserver, dllunloadnow  
這四個(gè)函數(shù)各有作用,有些是提供給COM管理器用的,通過CLSID和IID來使用,有些是提
供給注冊(cè)機(jī)用的.  
COM結(jié)合MTS,就是COM+, 是DCOM的高級(jí)版本,提供了更為強(qiáng)大和安全的分布式COM
服務(wù), DCOM運(yùn)行在不同的機(jī)器上 用proxy和stub來實(shí)現(xiàn)遠(yuǎn)程接口的本地映射 二者從
執(zhí)行速度來說 二者相差無幾 但是啟動(dòng)速度DLL要比COM快% 


這陣子在想一個(gè)需要利用com組件的小程序怎么做,突然想起上次去面試的時(shí)候考官問過AutoCAD開發(fā)時(shí)為什么要利用com,而不采用一般的DLL呢?到Google上查了一下,許多人也問了一樣的問題:)用com來寫程序要比普通的DLL麻煩一些,但是帶來的好處也大很多,尤其是在開發(fā)像AutoCAD這樣大型軟件的時(shí)候,需要跨區(qū)域來協(xié)同工作。

      學(xué)習(xí)COM,首先要知道COM的目的是什么,它解決了一個(gè)什么樣的問題,在此基礎(chǔ)上,MS提供了各式各樣的可擴(kuò)展的COM服務(wù),COM編程接口。這些服務(wù)和接口恐怕一個(gè)程序員一輩子都不可能通曉,因?yàn)榘l(fā)展是如此之快。大家也沒有必要通曉這些接口,就象對(duì)待大量的WINAPI的態(tài)度,用到時(shí)再查幫助。  

     COM的各種努力都是在規(guī)定了一種二進(jìn)制交互的協(xié)議。說起來簡(jiǎn)單,做起來相當(dāng)復(fù)雜,要使使用不同語言編寫的客戶能夠使用任意語言編寫的服務(wù)程序談何容易!這里說語言還是把問題簡(jiǎn)單化了,因?yàn)槊糠N語言還有各式各樣的編譯器,不同編譯器出來的二進(jìn)制代碼如何交互?

     就拿DLL來說,DLL是對(duì)靜態(tài)連接的一種改進(jìn),帶來了更細(xì)的開發(fā)分工,也帶來了很多問題,其中就有二進(jìn)制如何交互的問題。這個(gè)問題當(dāng)DLL輸出類時(shí)更加突出。COM為解決此問題提出了極負(fù)創(chuàng)意的解決方案,不僅如此,更進(jìn)一步引申,提出了如何跨網(wǎng)絡(luò)的交互。然后,針對(duì)internet服務(wù)器的開發(fā)提出COM+。COM體系中融合了多種經(jīng)典的設(shè)計(jì)模式,可以說是一種更加精干的C++。


     COM博大精深,若干大師仍須半年的mental fog, 方能有豁然開朗之時(shí)。我們這些晚輩,還需多加修煉才對(duì),但決不止是COM。

1、COM組件以接口對(duì)功能分類,便于組織;DLL特別是大的DLL,函數(shù)一大堆,難以組織;

2、COM組件便于升級(jí)維護(hù),功能擴(kuò)充,只需添加接口就行;DLL升級(jí)困難,函數(shù)不能隨意改變;

3、COM創(chuàng)建調(diào)用有很好的安全性,DLL沒有;

4、COM組件可輕松實(shí)現(xiàn)進(jìn)程間調(diào)用,DLL很困難;

5、COM組件可輕松實(shí)現(xiàn)分布式調(diào)用,DLL不可能;

6、COM組件具有封裝、繼承、多態(tài)的面向?qū)ο筇卣?,DLL只有封裝;

7、在COM組件的基礎(chǔ)上實(shí)現(xiàn)了大量功能:ActiveX,OLE等;

 

ActiveX、OLE、COM、OCX、DLL之間的區(qū)別

        熟悉面向?qū)ο缶幊毯途W(wǎng)絡(luò)編程的人一定對(duì)ActiveX、OLE和 COM/DCOM這些概念不會(huì)陌生,但是它們之間究竟是什么樣的關(guān)系,對(duì)許多人還是比較模糊的。在具體介紹它們的關(guān)系之間,我們還是先明確組件(Component)和對(duì)象(Object)之間的區(qū)別。組件是一個(gè)可重用的模塊,它是由一組處理過程、數(shù)據(jù)封裝和用戶接口組成的業(yè)務(wù)對(duì)象(Rules Object)。組件看起來像對(duì)象,但不符合對(duì)象的學(xué)術(shù)定義。它們的主要區(qū)別是:

1)組件可以在另一個(gè)稱為容器(有時(shí)也稱為承載者或宿主)的應(yīng)用程序中使用,也可以作為獨(dú)立過程使用;

2)組件可以由一個(gè)類構(gòu)成,也可以由多個(gè)類組成,或者是一個(gè)完整的應(yīng)用程序;

3)組件為模塊重用,而對(duì)象為代碼重用。

        現(xiàn)在,比較流行的組件模型有COM(Component ObjectModule,對(duì)象組件模型)/DCOM( Distributed COM,分布式對(duì)象組件模型)和CORBA(Common Object Request BrokerArchitecture,公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu))。

       到這里,已經(jīng)出現(xiàn)了與本文相關(guān)的主題COM,而CORBA與本文無關(guān),就不作介紹。之所以從組件 與對(duì)象的區(qū)別說起,是想讓大家明確COM和CORBA是處在整個(gè)體系結(jié)構(gòu)的最底層,如果暫時(shí)對(duì)此還不能理解,不妨繼續(xù)往下看,最后在回過頭看一看就自然明白了?,F(xiàn)在開始闡述ActiveX、OLE 和COM的關(guān)系。首先,讓大家有一個(gè)總體的概念,從時(shí)間的角度講,OLE是最早出現(xiàn)的,然后是COM和ActiveX;從體系結(jié)構(gòu)角度講,OLE和 ActiveX是建立在 COM之上的,所以COM是基礎(chǔ);單從名稱角度講,OLE、ActiveX是兩個(gè)商標(biāo)名稱,而COM則是一個(gè)純技術(shù)名詞,這也是大家更多的聽說 ActiveX和OLE的原因。既然OLE是最早出現(xiàn)的,那么就從OLE說起,自從Windows操作系統(tǒng)流行以來,“剪貼板”( Clipboard)首先解決了不同程序間的通信問題(由剪貼板作為數(shù)據(jù)交換中心,進(jìn)行復(fù)制、粘貼的操作),但是剪貼板傳遞的都是“死”數(shù)據(jù),應(yīng)用程序開發(fā)者得自行編寫、解析數(shù)據(jù)格式的代碼,于是動(dòng)態(tài)數(shù)據(jù)交換(Dynamic Data Exchange,DDE)的通信協(xié)定應(yīng)運(yùn)而生,它可以讓應(yīng)用程序之間自動(dòng)獲取彼此的最新數(shù)據(jù),但是,解決彼此之間的“數(shù)據(jù)格式”轉(zhuǎn)換仍然是程序員沉重的負(fù)擔(dān)。對(duì)象的鏈接與嵌入(Object Linking and Embedded,OLE)的誕生把原來應(yīng)用程序的數(shù)據(jù)交換提高到“對(duì)象交換”,這樣程序間不但獲得數(shù)據(jù)也同樣獲得彼此的應(yīng)用程序?qū)ο?,并且可以直接使用彼此的?shù)據(jù)內(nèi)容,其實(shí)OLE是Microsoft的復(fù)合文檔技術(shù),它的最初版本只是瞄準(zhǔn)復(fù)合文檔,但在后續(xù)版本OLE2中,導(dǎo)入了COM。由此可見,COM是應(yīng)OLE的需求而誕生的,所以雖然COM是OLE的基礎(chǔ),但OLE的產(chǎn)生卻在COM之前。COM的基本出發(fā)點(diǎn)是,讓某個(gè)軟件通過一個(gè)通用的機(jī)構(gòu)為另一個(gè)軟件提供服務(wù)。COM是應(yīng)OLE 的需求而誕生,但它的第一個(gè)使用者卻是OLE2,所以COM與復(fù)合文檔間并沒有多大的關(guān)系,實(shí)際上,后來COM就作為與復(fù)合文檔完全無關(guān)的技術(shù),開始被廣泛應(yīng)用。這樣一來, Microsoft就開始“染指”通用平臺(tái)技術(shù)。但是COM并不是產(chǎn)品,它需要一個(gè)商標(biāo)名稱。而那時(shí)Microsoft的市場(chǎng)專家們已經(jīng)選用了OLE作為 商標(biāo)名稱,所以使用COM技術(shù)的都開始貼上了OLE的標(biāo)簽。雖然這些技術(shù)中的絕大多數(shù)與復(fù)合文檔沒有關(guān)系。Microsoft的這一做法讓人產(chǎn)生這樣一個(gè)誤解OLE是僅指復(fù)合文檔呢?還是不單單指復(fù) 合文檔?其實(shí)OLE是COM的商標(biāo)名稱,自然不僅僅指復(fù)合文檔。但Microsoft自己恐怕無法解釋清楚,這要花費(fèi)相當(dāng)?shù)木蜁r(shí)間。 于是,隨著Internet的發(fā)展,在1996年春,Microsoft改變了主意,選擇ActiveX作為新的商標(biāo)名稱。ActiveX是指寬松定義 的、基于COM的技術(shù)集合,而OLE仍然僅指復(fù)合文檔。當(dāng)然, ActiveX最核心的技術(shù)還是COM。ActiveX和OLE的最大不同在于,OLE針對(duì)的是桌面上應(yīng)用軟件和文件之間的集成,而ActiveX則以提 供進(jìn)一步的網(wǎng)絡(luò)應(yīng)用與用戶交互為主。到這里,大家應(yīng)該對(duì)ActiveX、OLE和COM三者的關(guān)系有了一個(gè)比較明確的認(rèn)識(shí),COM才是最根本的核心技術(shù), 所以下面的重點(diǎn)COM。讓對(duì)象模型完全獨(dú)立于編程語言,這是一個(gè)非常新奇的思想。這一點(diǎn)從C++和Java的對(duì)象概念上,我們就能有所了解。但所謂COM 對(duì)象究竟是什么呢?為了便于理解,可以把COM看作是某種(軟件)打包技術(shù),即把它看作是軟件的不同部分,按照一定的面向?qū)ο蟮男问?,組合成可以交互的過程和以組支持庫(kù)。COM對(duì)象可以用C++、Java和VB等任意一種語言編寫,并可以用DLL或作為不同過程工作的執(zhí)行文件的形式來實(shí)現(xiàn)。使用COM對(duì)象 的瀏覽器,無需關(guān)心對(duì)象是用什么語言寫的,也無須關(guān)心它是以DLL還是以另外的過程來執(zhí)行的。從瀏覽器端看,無任何區(qū)別。這樣一個(gè)通用的處理技巧非常有用。例如,由用戶協(xié)調(diào)運(yùn)行的兩個(gè)應(yīng)用,可以將它們的共同作業(yè)部分作為COM對(duì)象間的交互來實(shí)現(xiàn)(當(dāng)然,現(xiàn)在的OLE復(fù)合文檔也能做到)。為在瀏覽器中執(zhí)行 從Web服務(wù)器下載的代碼,瀏覽器可把它看作是COM對(duì)象,也就是說,COM技術(shù)也是一種打包可下載代碼的標(biāo)準(zhǔn)方法(ActiveX控件就是執(zhí)行這種功能的)。甚至連應(yīng)用與本機(jī)OS進(jìn)行交互的方法也可以用COM來指定,例如在Windows和Windows NT中用的是新API,多數(shù)是作為COM對(duì)象來定義的??梢?,COM雖然起源于復(fù)合文檔,但卻可有效地適用于許多軟件問題,它畢竟是處在底層的基礎(chǔ)技術(shù)。 用一句話來說,COM是獨(dú)立于語言的組件體系結(jié)構(gòu),可以讓組件間相互通信。隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,COM進(jìn)一步發(fā)展為分布式組件對(duì)象模型,這就是 DCOM,它類似于CORBA的ORB,本文對(duì)此將不再做進(jìn)一步的闡述。通過上面的講述相信大家一定對(duì)ActiveX、OLE和COM/DCOM的關(guān)系有 了一個(gè)清楚的了解。

    使用Windows的人對(duì)于ActiveX控制一定不會(huì)陌生,它提供了一種類似于DLL動(dòng)態(tài)鏈接庫(kù)的調(diào)用,不過它與DLL的唯一區(qū)別就是ActiveX不注冊(cè)不能被系統(tǒng)識(shí)別并使用。那么,當(dāng)我們得到一個(gè)ActiveX沒有被正確安裝且不能使用的消息后,又要安裝ActiveX怎么辦呢?1. Regsvr32程序法在Windows的System文件夾下有一個(gè)regsvr32.exe的程序,它就是Windows自己帶的ActiveX注冊(cè) 和反注冊(cè)工具。利用它也能夠非常方便地注冊(cè)ActiveX控件,它的用法為:regsvr32/u/s/n/iDLLNAME,其中DLLNAME為ActiveX控件文件名,建議在安裝前拷貝到System文件夾下參數(shù)有如下意義:/u - 反注冊(cè)控件 /s - 不管注冊(cè)成功與否,均不顯示提示框/c - 控制臺(tái)輸出/i- 跳過控件的選項(xiàng)進(jìn)行安裝 (與注冊(cè)不同) /n - 不注冊(cè)控件,此選項(xiàng)必須與/i 選項(xiàng)一起使用例如筆者要注冊(cè)amovie.ocx控件,則打入 regsvr32 amovie.ocx即可,要反注冊(cè)它時(shí)只需使用regsvr32 /u amovie.ocx就行了。2.注冊(cè)表法所謂注冊(cè)ActiveX,無非是將一些信息記錄在Windows的注冊(cè)表中,如SchockWave Flash Object控件,我們可以運(yùn)行Regedit.exe注冊(cè)表編輯程序,利用關(guān)鍵字進(jìn)行搜索,然后把搜索得到后的注冊(cè)表導(dǎo)出為一REG注冊(cè)表文件,再將其相應(yīng)的ActiveX文件拷貝到Windows的System文件夾(一般ActiveX的文件名為OCX,安裝在Windows的System文件夾 內(nèi))下,最后在要安裝ActiveX的機(jī)器上雙擊導(dǎo)入剛才導(dǎo)出的注冊(cè)表文件即可完成安裝。

    ActiveX、OLE和COM都是微軟的一些技術(shù)標(biāo)準(zhǔn)。Ole比較老后來發(fā)展成ActiveX,再后來發(fā)展成為COM OCX,DLL是擴(kuò)展名。ActiveX有兩種擴(kuò)展名OCX和DLL。實(shí)際上你可以把它們的擴(kuò)展名字調(diào)換。 COM作為ActiveX的更新技術(shù),擴(kuò)展名也有可能是DLL文件還有可能是動(dòng)態(tài)鏈接庫(kù)。主要是裝載一些函數(shù),可以動(dòng)態(tài)加載。COM的前景以后一種比較理想的應(yīng)用程序模式就是WEB化(條件是網(wǎng)絡(luò)速度足夠快),未來的軟件應(yīng)該不存在客戶應(yīng)用軟件的說法了,客戶就只有瀏覽器,瀏覽器就是操作系統(tǒng),客戶一邊下載一邊使用,當(dāng)然下載的都是一個(gè)個(gè)功能獨(dú)立的模塊。而這些功能獨(dú)立的模塊就是com組件,一般的DLL是不能這么用的。



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多