1. 程式人生 > >Activex、OLE、COM、OCX、DLL之間有什麼區別?

Activex、OLE、COM、OCX、DLL之間有什麼區別?

熟悉面向物件程式設計和網路程式設計的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什麼樣的關係,對許多們還是 比較模糊的。在具體介紹它們的關係之間,我們還是先明確元件(Component)和物件(Object)之間的區別。元件是一個可重用的模組,它是由一 組處理過程、資料封裝和使用者介面組成的業務物件(Rules Object)。元件看起來像物件,但不符合物件的學術定義。它們的主要區別是: 1)元件可以在另一個稱為容器(有時也稱為承載者或宿主)的應用程式中使用,也可以作為獨立過程使用; 2)元件可以由一個類構成,也可以由多個類組成,或者是一個完整的應用程式; 3)元件為模組重用,而物件為程式碼重用。現在,比較流行的元件模型有COM(Component Objiect Module,物件元件模型)/DCOM( Distributed COM,分散式物件元件模型)和CORBA(Common Object Request Broker Architecture,公共物件請求代理體系結構)。到這裡,已經出現了與本文相關的主題COM,而CORBA與本文無關,就不作介紹。之所以從元件 與物件的區別說起,是想讓大家明確COM和 CORBA是處在整個體系結構的最底層,如果暫時對此還不能理解,不妨繼續往下看,最後在回過頭看一看就自然明白了。現在開始闡述ActiveX、OLE 和COM的關係。首先,讓大家有一個總體的概念,從時間的角度講,OLE是最早出現的,然後是COM和ActiveX;從體系結構角度講,OLE和 ActiveX是建立在 COM之上的,所以COM是基礎;單從名稱角度講,OLE、ActiveX是兩個商標名稱,而COM則是一個純技術名詞,這也是大家更多的聽說 ActiveX和OLE的原因。既然OLE是最早出現的,那麼就從OLE說起,自從Windows作業系統流行以來,“剪貼簿”( Clipboard)首先解決了不同程式間的通訊問題(由剪貼簿作為資料交換中心,進行復制、貼上的操作),但是剪貼簿傳遞的都是“死”資料,應用程式開 發者得自行編寫、解析資料格式的程式碼,於是動態資料交換(Dynamic Data Exchange,DDE)的通訊協定應運而生,它可以讓應用程式之間自動獲取彼此的最新資料,但是,解決彼此之間的“資料格式”轉換仍然是程式設計師沉重的 負擔。物件的連結與嵌入(Object Linking and Embedded,OLE)的誕生把原來應用程式的資料交換提高到“物件交換”,這樣程式間不但獲得資料也同樣獲得彼此的應用程式物件,並且可以直接使用 彼此的資料內容,其實OLE是Microsoft的複合文件技術,它的最初版本只是瞄準複合文件,但在後續版本OLE2中,匯入了COM。由此可 見,COM是應OLE的需求而誕生的,所以雖然COM是OLE的基礎,但OLE的產生卻在COM之前。 COM的基本出發點是,讓某個軟體通過一個通用的機構為另一個軟體提供服務。COM是應OLE 的需求而誕生,但它的第一個使用者卻是OLE2,所以COM與複合文件間並沒有多大的關係,實際上,後來COM就作為與複合文件完全無關的技術,開始被廣 泛應用。這樣一來, Microsoft就開始“染指”通用平臺技術。但是COM並不是產品,它需要一個商標名稱。而那時Microsoft的市場專家們已經選用了OLE作為 商標名稱,所以使用COM技術的都開始貼上了 OLE的標籤。雖然這些技術中的絕大多數與複合文件沒有關係。Microsoft的這一做法讓人產生這樣一個誤解OLE是僅指複合文件呢?還是不單單指復 合文件?其實OLE是COM的商標名稱,自然不僅僅指複合文件。但Microsoft自己恐怕無法解釋清楚,這要花費相當的精力和時間。 於是,隨著Internet的發展,在1996年春,Microsoft改變了主意,選擇ActiveX作為新的商標名稱。ActiveX是指寬鬆定義 的、基於COM的技術集合,而OLE仍然僅指複合文件。當然, ActiveX最核心的技術還是COM。ActiveX和OLE的最大不同在於,OLE針對的是桌面上應用軟體和檔案之間的整合,而ActiveX則以提 供進一步的網路應用與使用者互動為主。到這裡,大家應該對ActiveX、OLE和COM三者的關係有了一個比較明確的認識,COM才是最根本的核心技術, 所以下面的重點COM。讓物件模型完全獨立於程式語言,這是一個非常新奇的思想。這一點從C++和Java的物件概念上,我們就能有所瞭解。但所謂COM 物件究竟是什麼呢?為了便於理解,可以把COM看作是某種(軟體)打包技術,即把它看作是軟體的不同部分,按照一定的面向物件的形式,組合成可以互動的過 程和以組支援庫。COM物件可以用C++、Java和VB等任意一種語言編寫,並可以用DLL或作為不同過程工作的執行檔案的形式來實現。使用COM物件 的瀏覽器,無需關心物件是用什麼語言寫的,也無須關心它是以DLL還是以另外的過程來執行的。從瀏覽器端看,無任何區別。這樣一個通用的處理技巧非常有 用。例如,由使用者協調執行的兩個應用,可以將它們的共同作業部分作為COM物件間的互動來實現(當然,現在的OLE複合文件也能做到)。為在瀏覽器中執行 從Web伺服器下載的程式碼,瀏覽器可把它看作是COM物件,也就是說,COM技術也是一種打包可下載程式碼的標準方法(ActiveX控制元件就是執行這種功能 的)。甚至連應用與本機OS進行互動的方法也可以用COM來指定,例如在Windows和Windows NT中用的是新API,多數是作為COM物件來定義的。可見,COM雖然起源於複合文件,但卻可有效地適用於許多軟體問題,它畢竟是處在底層的基礎技術。 用一句話來說,COM是獨立於語言的元件體系結構,可以讓元件間相互通訊。隨著計算機網路的發展,COM進一步發展為分散式元件物件模型,這就是 DCOM,它類似於CORBA的ORB,本文對此將不再做進一步的闡述。通過上面的講述相信大家一定對ActiveX、OLE和COM/DCOM的關係有 了一個清楚的瞭解。

        使用Windows的人對於ActiveX控制一定不會陌生,它提供了一種類似於DLL動態連結庫的呼叫,不過它與DLL的唯一區別就是ActiveX不 註冊不能被系統識別並使用。那麼,當我們得到一個ActiveX沒有被正確安裝且不能使用的訊息後,又要安裝ActiveX怎麼辦 呢?1.Regsvr32程式法在Windows的System資料夾下有一個regsvr32.exe的程式,它就是Windows自己帶的 ActiveX註冊和反註冊工具。利用它也能夠非常方便地註冊AcitveX控制元件,它的用法為:regsvr32/u/s/n/i dllname, dllname其中dllname為ActiveX控制元件檔名,建議在安裝前拷貝到System資料夾下引數有如下意義:/u - 反註冊控制元件/s - 不管註冊成功與否,均不顯示提示框/c - 控制檯輸出/i - 跳過控制元件的選項進行安裝 (與註冊不同)/n - 不註冊控制元件,此選項必須與/i 選項一起使用例如筆者要註冊一amovie.ocx控制元件,則打入 regsvr32 amovie.ocx即可,要反註冊它時只需使用 regsvr32 /u amovie.ocx就行了。2.登錄檔法所謂註冊AcitveX,無非是將一些資訊記錄在Windows的登錄檔中,如Shockwave Flash Object控制元件,我們可以執行Regedit.exe登錄檔編輯程式,利用關鍵字進行搜尋,然後把搜尋得到後的登錄檔匯出為一REG登錄檔檔案,再將其 相應的ActiveX檔案拷貝到Windows的System資料夾(一般ActiveX的檔名為OCX,安裝在Windows的System資料夾 內)下,最後在要安裝ActiveX的機器上雙擊匯入剛才匯出的登錄檔檔案即可完成安裝。

       Activex,OLE,COM都是微軟的一些技術標準。Ole比較老後來發展成Activex,再後來發展成為COM OCX,DLL是副檔名。 Activex有兩種副檔名OCX和DLL。實際上你可以把它們的擴暫名字調換。 COM作為ActiveX的更新技術,副檔名也有可能是DLL DLL檔案還有可能是動態連結庫。主要是裝載一些函式,可以動態載入。

相關推薦

ActivexOLECOMOCXDLL之間什麼區別

熟悉面向物件程式設計和網路程式設計的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什麼樣的關係,對許多們還是 比較模糊的。在具體介紹它們的關係之間,我們還是先明確元件(Component)和物件(Object)之間的區別。元件是一個可

Activex OLE COM OCX DLL之間什麼區別

熟悉面向物件程式設計和網路程式設計的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什麼樣的關係,對許多人還是比較模糊的。 在具體介紹它們的關係之間,我們還是先明確元件(Component)和物件(Object)之間的區別。元件是一個可重

重寫(overwrite)重載(overload)和覆蓋(override)三者之間區別

ride 傳遞 方法 子類 bsp 區別 參數 定義 load 覆蓋:子類繼承了父類的同名無參函數。當子類從父類繼承了一個無參函數,而又定義了一個同樣的無參函數,則子類定義的方法覆蓋父類的方法,稱為覆蓋。 重載:子類繼承了父類的同名有參函數。

JVM記憶體結構Java記憶體模型以及Java物件模型之間區別

Java作為一種面向物件的,跨平臺語言,其物件、記憶體等一直是比較難的知識點。而且很多概念的名稱看起來又那麼相似,很多人會傻傻分不清楚。比如本文我們要討論的JVM記憶體結構、Java記憶體模型和Java物件模型,這就是三個截然不同的概念,但是很多人容易弄混。 可以這樣說,很多高階開發甚至都搞

ActivexOLECOMOCXDLL區別

  熟悉面向物件程式設計和網路程式設計的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什麼樣的關係,對許多們還是比較模糊的。     在具體介紹它們的關係之間,我們還是先明確元件(Component)和物件(Object)之間的區別

[科普]ActivexOLECOMOCXDLL

原創文章,歡迎轉載。轉載請註明:轉載自 祥的部落格 1. 基礎 熟悉面向物件程式設計和網路程式設計的人一定對ActiveX、OLE和COM/DCOM這些概念不會陌生,但是它們之間究竟是什麼樣的關係,對許多們還是比較模糊的。在

COMActiveXOLE的聯系和區別

多版本 使用 stdcall 需求 std 如果 是你 目錄 協作 這三者都是微軟上世紀90年代提出的技術,不僅至今仍在使用,其設計思路對今天的軟件架構仍有著很大的參考意義。 從出現的歷史來看,OLE最早出現,然後COM,然後ActiveX。 最早是應復合文檔的需求,OLE

MFC 應用程序MFC ActiveXMFC dll三者什麽區別

x文件 cti 應該 net 一個 nbsp mfc log active MFC 應用程序是創建一個MFC應用程序的意思,最後生成的文件應該是exe文件。 MFC ActiveX是創建一個ActiveX工程的意思,最後生成的文件應該是ActiveX文件。 MFC dll是

JDBCODBCOLE DBADOADOMD區別與聯系

通路 lin 區別 microsoft com技術 cti 由於 應用層 疑惑 ODBC: (Open Database Connectivity,開放數據庫互連),它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。這些API利用SQL來完成其大部

資料庫訪問介面(ODBCOLE DBADO)

最近在學C#的資料庫程式設計,對於資料庫介面技術這塊的知識一直比較模糊,網上查了不少資料,看了幾天還是朦朦朧朧的,只能做些筆記再研究了。 我們都知道,“資料庫”是指一組相關資訊的集合,最早的計算機應用之一也是開發資料庫系統,即通過計算機來儲存和檢索資料的機制。 在資料庫發展的前幾十年裡,資料以各種不同的方

配置dns後重啟報錯“13: near 'bbs.adamkuo.com.': bad dotted quad”“not loaded due to errors.”“bad dotted quad”

1.先看一下我的log錯誤提示:(出現此類問題肯定是配置檔案有問題,仔細檢查配置檔案) Nov 30 14:25:31 localhost named-checkconf: zone adamkuo.com/IN: loading from master file adamkuo.com.zone fail

OJ術語: ACWATLEOLEMLEREPECE

起因 看到一些術語不清楚是什麼意思,上網查閱相關資料後,歸納如下。 彙總 簡寫 全稱 中文稱謂 OJ Online Judge 線上判題系統 AC

ODBCOLE DB ADO的區別

1992年Microsoft和Sybase、Digital共同制定了ODBC標準介面,以單一的ODBC API來存取各種不同的資料庫。隨後ODBC便獲得了許多資料庫廠商和Third-Party的支援而逐漸成為標準的資料存取技術。 ODBC以當時的業界標準規範X/OpenCall-LevelInterface(

解決在WIN7 64位系統下無法註冊comdlg32.ocxmscomm32.ocx等的控制元件的問題

先反註冊再重新註冊試試! regsvr32 mscomctl.ocx /u  regsvr32 mscomctl.ocx  解決在 WIN7 64 位系統下無法註冊 comdlg32.ocx 、 mscomm32.ocx 等的控制元件的問題 1 、首先確保你的 WIN7 是管理員許可權 2 、下載

.Net之路(十四)com組件OLEDB導入EXCEL

進制數 sum ast 方法 The files str source 二進制 版權聲明:本文為博主原創文章,未經博主同

表單提交 防註入XSS 1入庫時轉義後臺 2出庫轉義前臺

his 驗證 替換字符 插入 如果 不同的 js代碼 urn ida 第一種 入庫過濾js自動填充時過濾js代碼class GoodsModel extends Model{ // 填充 protected $_auto = [ // 自己補充填充

oracle 12c 多租戶 pdb 恢復(單個pdb數據文件非系統pdb表空間整個pdb數據庫)

數據文件 ota ora-01110 創建 正常 方式 cti users rman 環境:數據庫版本 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production實驗準備:1.--

Ztree _ 橫向顯示子節點點擊文字勾選去除指定元素input的勾選狀態

.cn hid ttr 很好 clas pre ges tree 效果 前些天項目需要樹結構表現數據,需求ztree就能滿足所以直接使用ztree只是踩了些小坑。。。 1.ztree子節點橫向顯示(下圖): 效果說明:第三級子節點按需求橫向顯示其他豎向顯示,每行最多顯示5

進擊的Python【第九章】:paramiko模塊線程與進程各種線程鎖queue隊列生產者消費者模型

password locking form maxsize 廁所 sorted [0 hostname nbsp 一、paramiko模塊 他是什麽東西?   paramiko模塊是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連

WCFWebAPIWCFRESTWebService之間區別

pipes asmx 平板電腦 bind template windows服務 創建 通過 soa 在.net平臺下,有大量的技術讓你創建一個HTTP服務,像Web Service,WCF,現在又出了Web API。在.net平臺下,你有很多的選擇來構建一個HTTP Ser