程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> COM技術縱橫談

COM技術縱橫談

編輯:vc教程

  一:概述

  PC機自從誕生以來,硬件經歷了無數變化,CPU從最初的INTEL 8086到現在PIII滿大街都是也只不過十幾年。微軟的Windows操作系統從最初的1.0版本到現在即將推出WIN2000,一直是桌面系統上裝機量最大的OS。 作為軟件開發人員,使用著包括Visual Basic,Visual C++,Delphi包括最新的Borland C++ builder等等在內的眾多開發環境為Windows開發應用程序。應該說現在的開發條件和若干年以前比已經是大大的進步了。

  如果你開發過16位的Windows程序,你可能知道為了讀取一個文件,我們不得不使用一小段匯編來調用DOS例程,或者使用當時Windows尚未公開的函數:_lopen()。在win32環境下,你所要做的全部是調用 : :CreateFile()來獲得一個文件句柄,當然如果使用MFC或是OWL之類的東西,你可以更簡單的做到。不過一般情況下,程序員仍然不得不從頭開始寫編寫應用程序的每一行代碼。

  但這種情況得到了改變:微軟提出了C O M(Component Object Model, 中文也可以譯作“組件對象模型”)概念,並且在最新的Windows95/98以及WIN NT4中越來越廣泛的使用它:我們有理由相信在不久的將來,C O M 將成為構建應用程序最普遍的方法,如果你對此技術有興趣,不妨參考本文,希望從中你能學到想知道的知識。如果你已經是C O M老手,也歡迎你批評指正,我的email是 [email protected]

  本文是針對C++程序員寫的。在介紹概念的時候,我盡量不把WIN32 API的知識混合進來,以便你能夠更清晰的看到C O M的本質。所有的例子都用Microsoft Visual C++5(SP3)編譯通過。

  一般的講,一個應用程序總是由單個的二進制文件組成。在以前,如果這個程序需要做一些改進,就要修改源代碼,然後編譯,聲稱新的文件,然後取代原來的文件。現在,我們用一種全新的角度來看問題:把原先一整個的EXE可執行文件,分割成功能不同,但相對獨立的幾個部分,把他們拼裝起來,組成程序,組成軟件。在未來程序發布以後,如果意識到需要對他進行修改,只要替換有問題的或是需要升級的組建就可以了。甚至可以做到再不影響程序正常運行的情況下替換其中的部件。如果你熟悉WINDOWS編程,可能會想到:DLL似乎就是你所說的東西:可以動態連接。事實上,COM正是充分利用了Win32 DLL的靈活性才得以真正在Windows平台上實現的。

  這樣做有哪些優點呢?首先:用戶一般希望能夠定制所用的應用程序,而組件技術從本質上講就是可被定制的,因而用戶可以用更能滿足他們需要的某個組件來替換原來的那個。其次,由於組件是相對應用程序獨立的部件,我們可以在不同的程序中使用同一個組件而不會產生任何問題,軟件的可重用性將大大的得到增強。第三,隨著網絡帶寬及其重要性的提高,分布式網絡應用程序毫無疑問的成為軟件市場上越來越重要的買點。組件價構可以使得開發這類應用程序的過程得以簡化。

  那麼,COM到底是什麼呢?它是一個說明如何建立可動態互變組件的規范。 他定義了一些為保證能互操作,客戶(一個術語,指需要某種組件的程序)組件必須遵循的標准,COM規范就是一套為組件架構設置標准的文檔形式的規范。COM的發布形式是:以win32動態鏈接庫(DLL)或者可執行文件(EXE)的形式發布的可執行代碼組成。

  COM組件是動態連接的,而且COM組件是完全與語言無關的。同時,COM組件可以以二進制的形式發布。COM組件還可以在不妨礙老客戶的情況下被升級成新的版本。

  你現在可以認為,COM所能提供的服務有些類似C++中的類。不過類是基於源代碼的,COM則不是。不過這裡要澄清一些關於COM的錯誤觀點:首先,COM不是一種計算機語言。把COM同某種計算機語言(如C++, VB)相比較是沒有意義的。其次,也不要把DLL和COM做比較,因為COM技術正是利用了DLL的動態鏈接能力才得以實現的,而現在一般觀點則認為,利用DLL動態鏈接能力最佳的方法是COM。當然,COM也不是win32 API那樣的一個函數集:它並沒有支持或者提供類似MoveWindow這樣的函數來對系統進行特定的操作。COM也並不是類似於MFC那樣的C++類庫。COM給開發人員提供的是一種開發與語言無關的組件庫的方法,但COM本身並

[1] [2] [3] [4] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved