com與dll 區別和聯繫

com英文爲Component Object Model(組件對象模型),是微軟生產軟件組件的標準。它是構造二進制兼容軟件組件的規範,不管組件應用何種語言編寫只要遵循com規範就可以相互直接通信。提出com規範主要是爲了滿足: 
1.程序的快速開發,可以將一個大型的工程分成若干個com組件同時開發。 
2.可以動態的插入或卸載com組件。 
3.可以隱藏或封裝com組件內部的實現細節。 com組件可以由不同的語言進行編寫,但com組件之間的通信是通過組件的接口來實現的,com組件接口的實現是統一的,它採用的是虛擬函數表(VTBL)形式。虛擬函數表中包含了組件函數的一組指針,我們可以通過這組指針來獲取我們想要通信的組件函數的內存地址。 
dll(動態鏈接庫)是包含函數和數據的模塊的集合。它可以導出數據也可以導出函數以供其它的dll調用。dll的加載可以通過靜態鏈接和動態鏈接兩種方式。 
1.靜態鏈接時將所要鏈接的dll模塊以二進制的形式編譯進其他模塊。 
2.動態鏈接指調用模塊在運行時加載DLL,使用LoadLibrary函數或LoadLibraryEx函數將dll 加載到進程的地址空間,並調用GetProcAddress函數以獲取導出的 DLL 函數的地址。 
動態加載dll的優點: 
1.DLL可節省內存並減少交換。通過在內存中共享 DLL 的單個副本,多個進程可以同時使用一個DLL。相比之下,對於使用靜態鏈接庫構建的每一個應用程序,Windows 都要在內存中爲其加載庫代碼的一個副本。 
2.DLL 可節省磁盤空間。 多個應用程序可以共享磁盤上的一個 DLL 副本。相比之下,使用靜態 鏈接庫構建的每一個應用程序都需要讓鏈接到程序文件映像的庫代碼作爲一個單獨的專用副本。 
dll與com的關係:com是一種規範,按照是com規範實現的dll可以被視爲com組件,例如我們用mfc建立的Active X控件工程其中的接口封裝是靠idl描述的所以可以視爲com組件。而且從上面關於com和dll的說明可以看出com組件的接口是一組具有特定規範的函數,所以com組件可以別視爲dll但dll不一定是com組件。 
com和DLL最大的區別就是: dll是以函數集合的方式來調用的是編程語言相關的象VC必須加上extern "C"...而COM是以interface的方式提供給用戶使用的是一種二進制的調用規範,是與編程語言無關的,它使用idl接口定義語言來描述自己使用類繼承來實現自己的功能和方法.DLL只有DLL一種形勢,裏面可任意定義函數無限制,只能運行在本機上 而COM 有DLL和EXE兩種存在形勢: COM所在的DLL中必須導出四個函數: 
dllgetobjectclass, dllregisterserver, dllunregisterserver, dllunloadnow 
這四個函數各有作用,有些是提供給COM管理器用的,通過CLSID和IID來使用,有些是提供給註冊機用的. 
COM結合MTS,就是COM+, 是DCOM的高級版本,提供了更爲強大和安全的分佈式COM服務, DCOM運行在不同的機器上 用proxy和stub來實現遠程接口的本地映射 二者從執行速度來說 二者相差無幾 但是啓動速度DLL要比COM快%
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章