青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

什么是COM組件(源于互聯(lián)網(wǎng))

http://blog.csdn.net/thankall/archive/2009/01/15/3785583.aspx

 

COM是開發(fā)軟件組件的一種方法。組件實際上是一些小的二進制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng)以及其他組件提供服務(wù)。開發(fā)自定義的COM組件就如同開發(fā)動態(tài)的,面向?qū)ο蟮?span lang="EN-US">API。多個COM對象可以連接起來形成應(yīng)用程序或組件系統(tǒng)。

 

 COMComponent Object Model (組件對象模型)的縮寫。

 

  用戶需要什么樣的軟件產(chǎn)品?這是一個多選題,但高效,健壯是肯定會被選種的。作為一名軟件開發(fā)人員如何做才能滿足用戶的需要呢?必須要保證升級應(yīng)用時不破壞與以前版本的向后兼容性。必須做到擴展系統(tǒng)服務(wù)時不依賴特定的操作系統(tǒng)。面向?qū)ο蟮某绦蛟O(shè)計顯然是一次革命性的改變。采用面向?qū)ο蟮脑O(shè)計方法我們可以很容易的把要解決的問題事物抽象成各種類,并將內(nèi)部動作封裝隱藏起來,只提供一些接口。但這并沒有完全解決我們的問題。昨天我在《程序員》雜志上看到,現(xiàn)在是后OO時代,那OO以后是什么呢?應(yīng)該是面向組件吧。

 

  COM componentCOM組件)

 

  COM是微軟公司為了計算機工業(yè)的軟件生產(chǎn)更加符合人類的行為方式開發(fā)的一種新的軟件開發(fā)技術(shù)。在COM構(gòu)架下,人們可以開發(fā)出各種各樣的功能專一的組件,然后將它們按照需要組合起來,構(gòu)成復雜的應(yīng)用系統(tǒng)。由此帶來的好處是多方面的:可以將系統(tǒng)中的組件用新的替換掉,以便隨時進行系統(tǒng)的升級和定制;可以在多個應(yīng)用系統(tǒng)中重復利用同一個組件;可以方便的將應(yīng)用系統(tǒng)擴展到網(wǎng)絡(luò)環(huán)境下;COM與語言,平臺無關(guān)的特性使所有的程序員均可充分發(fā)揮自己的才智與專長編寫組件模塊;等等。

 

  COM是開發(fā)軟件組件的一種方法。組件實際上是一些小的二進制可執(zhí)行程序,它們可以給應(yīng)用程序,操作系統(tǒng)以及其他組件提供服務(wù)。開發(fā)自定義的COM組件就如同開發(fā)動態(tài)的,面向?qū)ο蟮?span lang="EN-US">API。多個COM對象可以連接起來形成應(yīng)用程序或組件系統(tǒng)。并且組件可以在運行時刻,在不被重新鏈接或編譯應(yīng)用程序的情況下被卸下或替換掉。Microsoft的許多技術(shù),如ActiveX, DirectX以及OLE等都是基于COM而建立起來的。并且Microsoft的開發(fā)人員也大量使用COM組件來定制他們的應(yīng)用程序及操作系統(tǒng)。

 

  COM所含的概念并不止是在Microsoft Windows操作系統(tǒng)下才有效。COM并不是一個大的API,它實際上象結(jié)構(gòu)化編程及面向?qū)ο缶幊谭椒菢樱彩且环N編程方法。在任何一種操作系統(tǒng)中,開發(fā)人員均可以遵循“COM方法”。

 

  一個應(yīng)用程序通常是由單個的二進制文件組成的。當編譯器生成應(yīng)用程序之后,在對下一個版本重新編譯并發(fā)行新生成的版本之前,應(yīng)用程序一般不會發(fā)生任何變化。操作系統(tǒng),硬件及客戶需求的改變都必須等到整個應(yīng)用程序被重新生成。

 

  目前這種狀況已經(jīng)發(fā)生變化。開發(fā)人員開始將單個的應(yīng)用程序分隔成單獨多個獨立的部分,也既組件。這種做法的好處是可以隨著技術(shù)的不斷發(fā)展而用新的組件取代已有的組件。此時的應(yīng)用程序可以隨新組件不斷取代舊的組件而漸趨完善。而且利用已有的組件,用戶還可以快速的建立全新的應(yīng)用。

 

  傳統(tǒng)的做法是將應(yīng)用程序分割成文件,模塊或類,然后將它們編譯并鏈接成一個單模應(yīng)用程序。它與組件建立應(yīng)用程序的過程(稱為組件構(gòu)架)有很大的不同。一個組件同一個微型應(yīng)用程序類似,即都是已經(jīng)編譯鏈接好并可以使用的二進制代碼,應(yīng)用程序就是由多個這樣的組件打包而得到的。單模應(yīng)用程序只有一個二進制代碼模塊。自定義組件可以在運行時刻同其他的組件連接起來以構(gòu)成某個應(yīng)用程序。在需要對應(yīng)用程序進行修改或改進時,只需要將構(gòu)成此應(yīng)用程序的組件中的某個用新的版本替換掉即可。

 

  COM,即組件對象模型,是關(guān)于如何建立組件以及如何通過組件建立應(yīng)用程序的一個規(guī)范,說明了如何可動態(tài)交替更新組件。

 

  使用組件的優(yōu)點:

 

  組件架構(gòu)的一個優(yōu)點就是應(yīng)用可以隨時間的流逝而發(fā)展進化。除此之外,使用組件還有一些可以使對以有應(yīng)用的升級更加方便和靈活的優(yōu)點,如應(yīng)用的定制,組件庫以及分布式組件等。

 

  使用組件的種種優(yōu)點直接來源于可以將它們動態(tài)的插入或卸出應(yīng)用。為了實現(xiàn)這種功能,所有的組件必須滿足兩個條件:第一,組件必須動態(tài)鏈接;第二,它們必須隱藏(或封裝)其內(nèi)部實現(xiàn)細節(jié)。動態(tài)鏈接對于組件而言是一個至關(guān)重要的要求,而消息隱藏則是動態(tài)鏈接的一個必要條件。

 

  補充:COM組件由以Win 32動態(tài)連接庫(DLL)或可執(zhí)行文件(EXE)形式發(fā)布的可執(zhí)行代碼所組成。遵循COM規(guī)范編寫出來的組件將能夠滿足對組件架構(gòu)的所有要求。COM組件可以給應(yīng)用程序、操作系統(tǒng)以及其他組件提供服務(wù);自定義的COM組件可以在運行時刻同其他組件連接起來構(gòu)成某個應(yīng)用程序;COM組件可以動態(tài)的插入或卸出應(yīng)用。

 

  惡意網(wǎng)站可以利用含有漏洞的com組件接口,下載木馬,并且執(zhí)行;

 

  禁用com組件一般是指設(shè)置了Kill位,即IE瀏覽器不能使用這個組件,通俗講:通過設(shè)置Kill位,可以使InternetExplorer在使用默認設(shè)置時永不調(diào)用被禁用的com組件,從而禁止該控件在Internet Explorer中運行。禁用含有漏洞的com組件后,IE就不能調(diào)用含有漏洞的COM組件;黑客利用有漏洞的COM組,寫成的網(wǎng)頁代碼就不能在IE中被執(zhí)行,木馬等將不會被下載。

 

  禁用com組件可能導致的問題:

 

  在線播放功能的組件被禁用,會導致在線電影等在線視頻無法正常觀看;

 

  在線殺毒功能的組件被禁用,會導致在線殺毒不能使用;

 

  在線游戲功能的組件被禁用,會導致在線游戲無法玩,

 

  com組件禁用后的具體情況,需要根據(jù)具體的com組件功能作判斷。

 

  手動啟動COM組件操作方法:

 

  運行——regedit——找到被禁用的com組件對應(yīng)的clsid|注冊表鍵值——刪除具體值,或者整個鍵。

 

  剛剛讀完《COM技術(shù)內(nèi)幕》一書,整理了一個FAQ,供大家在學習此書時參考。

 

  這是第一部分,包含前3章的內(nèi)容。

 

  FAQ1:什么是COM組件?〖第一章〗

 

  Answer:

 

  COM組件是以WIN32動態(tài)鏈接庫(DLL)或可執(zhí)行文件(EXE)形式發(fā)布的可執(zhí)行代碼組成。

 

  COM組件是遵循COM規(guī)范編寫的

 

  COM組件是一些小的二進制可執(zhí)行文件

 

  COM組件可以給應(yīng)用程序、操作系統(tǒng)以及其他組件提供服務(wù)

 

  自定義的COM組件可以在運行時刻同其他組件連接起來構(gòu)成某個應(yīng)用程序

 

  COM組件可以動態(tài)的插入或卸出應(yīng)用

 

  COM組件必須是動態(tài)鏈接的

 

  COM組件必須隱藏(封裝)其內(nèi)部實現(xiàn)細節(jié)

 

  COM組件必須將其實現(xiàn)的語言隱藏

 

  COM組件必須以二進制的形式發(fā)布

 

  COM組件必須可以在不妨礙已有用戶的情況下被升級

 

  COM組件可以透明的在網(wǎng)絡(luò)上被重新分配位置

 

  COM組件按照一種標準的方式來宣布它們的存在

 

  FAQ2:組件不是……?〖第一章〗

 

  Answer:

 

  COM組件不是一種計算機語言

 

  COM組件不是DLL,只是利用DLL來給組件提供動態(tài)鏈接的能力

 

  COM組件不是一個API函數(shù)集。

 

  COM組件不是類

 

  FAQ3:什么是接口?〖第二章〗

 

  Answer:

 

  接口就是提供兩個不同對象間的一種連接。

 

  計算機程序是通過一組函數(shù)而進行連接的,這組函數(shù)就是定義了程序中不同部分的接口。

 

  DLL的接口就是它所輸出的那些函數(shù)。

 

  C++類的接口就是該類的成員函數(shù)集。

 

  COM中的接口是一組由組件實現(xiàn)的提供給客戶使用的函數(shù)。

 

  在COM中接口是一個包含函數(shù)指針數(shù)組的內(nèi)存結(jié)構(gòu),數(shù)組元素是一個由組件實現(xiàn)的函數(shù)地址。

 

  FAQ4:接口的作用是什么?〖第二章〗

 

  Answer:

 

  有了組件如何將它們連接起來構(gòu)成某個應(yīng)用程序,需要用接口。

 

  在COM中接口就是一切,對客戶說組件就是接口集,客戶只能通過接口和組件打交道。

 

  說明接口可以保護系統(tǒng)免受外界變化的影響。這是封裝的體現(xiàn)。

 

  接口實現(xiàn)了使用戶使用同樣的方式來處理不同的組件。這是多態(tài)的體現(xiàn)。

 

  FAQ5:什么是IUnKnown? 〖第三章〗

 

  Answer:

 

  IUnKnown是一個接口。

 

  所有COM接口都繼承IUnKnown

 

  IUnKnown的定義在WIN32 SDK中的UNKNWN頭文件中。

 

  ///IUnKnown的定義

 

  interface IUnKnown

 

  {

 

  virtual HRESULT __stdcall QueryInterface(const IID& iid,void **ppv)=0;

 

  virtual ULONG __stdcall AddRef()=0;

 

  virtual ULONG __stdcall Release()=0;

 

  }

 

  FAQ6QueryInterface函數(shù)的作用是什么?〖第三章〗

 

  Answer:

 

  QueryInterfaceIUnKnown的成員函數(shù),客戶可以通過此函數(shù)來查詢組件是否支持某個特定的接口。

 

  QueryInterface函數(shù)返回一個指向組件支持的接口的指針。

 

  如果QueryInterface函數(shù)沒有找到組件支持的接口則返回指針是NULL

 

  QueryInterface函數(shù)可以使用ifthenelse語句、數(shù)組、散列表、樹來實現(xiàn)。

 

  QueryInterface函數(shù)不能使用case語句,因為QueryInterface函數(shù)返回的是一個HRESULT結(jié)構(gòu)而不是一個數(shù)。

 

  QueryInterface也是一種無封處理組件版本的機制。這種機制使得組件的新舊不同的版本可以互操作。

 

  FAQ7QueryInterface函數(shù)的實現(xiàn)規(guī)則是什么?〖第三章〗

 

  Answer:

 

  QueryInterface返回的IUnKnown指針總是相同。

 

  若客戶獲得了某個接口,那么它總能獲得此接口。

 

  客戶可以再次獲得已經(jīng)擁有的接口。

 

  客戶可以返回到起始接口。

 

  若能夠在某個接口獲得某個特定接口,那么從任意接口都將可以獲得此接口。

 

  FAQ8:接口的如何實現(xiàn)?

 

  Answer:

 

  COM接口在C++中是用純抽象基類實現(xiàn)。

 

  一個COM組件可以支多個接口。

 

  一個C++類可以使用多重繼承來實現(xiàn)一個支持多個接口的組件。

 

  組件可以支持任意數(shù)目的接口。

 

  接口應(yīng)該具有不變性。在組件升級時應(yīng)該不修改原來的接口,而是添加新的接口。

 

  要精心設(shè)計實現(xiàn)接口,以使之能夠支持各種不同的實現(xiàn)。

 

  FAQ9QueryInterface函數(shù)的參數(shù)IID是什么?〖第三章〗

 

  Answer:

 

  它是一個結(jié)構(gòu),接口標識符結(jié)構(gòu)。

 

  IID標識了客戶所需的接口。

 

  每一個接口都有一個唯一的接口標識符。所以某個與IID相對應(yīng)的接口絕對不會發(fā)生變化。

 

  接口IID決定了COM組件的版本。

 

  不同的接口具有不同的ID,包括不同版本的接口。

 

  FAQ10:何時需要建立一個新的COM組件版本?〖第三章〗

 

  Answer:

 

  當為已有接口指定新的ID時應(yīng)該是下面的條件至少有一個成立。

 

  接口中函數(shù)的數(shù)目發(fā)生改變時。

 

  接口中函數(shù)的順序發(fā)生改變。

 

  接口中某個函數(shù)的參數(shù)發(fā)生改變

 

  接口中某個函數(shù)的參數(shù)的順序發(fā)生改變

 

  接口中某個函數(shù)的參數(shù)的類型發(fā)生改變

 

  接口中函數(shù)的返回值發(fā)生改變

 

  接口中函數(shù)的返回值類型發(fā)生改變

 

  接口中函數(shù)的參數(shù)的含義發(fā)生改變

 

  接口中函數(shù)的含義發(fā)生改變

 

  簡單地說,COM是一種跨應(yīng)用和語言共享二進制代碼的方法。與C++不同,它提倡源代碼重用。ATL便是一個很好的例證。源碼級重用雖然好,但只能用于C++。它還帶來了名字沖突的可能性,更不用說不斷拷貝重用代碼而導致工程膨脹和臃腫。

 

  Windows使用DLLs在二進制級共享代碼。這也是Windows程序運行的關(guān)鍵——重用kernel32.dll, user32.dll等。但DLLs是針對C接口而寫的,它們只能被C或理解C調(diào)用規(guī)范的語言使用。由編程語言來負責實現(xiàn)共享代碼,而不是由DLLs本身。這樣的話DLLs的使用受到限制。

 

  MFC引入了另外一種MFC擴展DLLs二進制共享機制。但它的使用仍受限制——只能在MFC程序中使用。

 

  COM通過定義二進制標準解決了這些問題,即COM明確指出二進制模塊(DLLsEXEs)必須被編譯成與指定的結(jié)構(gòu)匹配。這個標準也確切規(guī)定了在內(nèi)存中如何組織COM對象。COM定義的二進制標準還必須獨立于任何編程語言(如C++中的命名修飾)。一旦滿足了這些條件,就可以輕松地從任何編程語言中存取這些模塊。由編譯器負責所產(chǎn)生的二進制代碼與標準兼容。這樣使后來的人就能更容易地使用這些二進制代碼。

 

  在內(nèi)存中,COM對象的這種標準形式在C++虛函數(shù)中偶爾用到,所以這就是為什么許多COM代碼使用C++的原因。但是記住,編寫模塊所用的語言是無關(guān)的,因為結(jié)果二進制代碼為所有語言可用。

 

  此外,COM不是Win32特有的。從理論上講,它可以被移植到Unix或其它操作系統(tǒng)。但是我好像還從來沒有在Windows以外的地方聽說過COM

 

 

 

本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/thankall/archive/2009/01/15/3785583.aspx

posted on 2011-01-10 12:44 肥仔 閱讀(1127) 評論(1)  編輯 收藏 引用 所屬分類: COM

評論

# re: 什么是COM組件(源于互聯(lián)網(wǎng))  回復  更多評論   

廢話一堆,唯一有用的就是 COM組件是以WIN32動態(tài)鏈接庫(DLL)或可執(zhí)行文件(EXE)形式發(fā)布的可執(zhí)行代碼組成。
2011-05-16 16:07 | WWWW
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情网站在线观看| 久久电影一区| 国产精品毛片a∨一区二区三区|国| 久久综合伊人| 免费精品视频| 欧美成人精品在线播放| 欧美福利在线| 欧美先锋影音| 国产一区二区三区久久悠悠色av | 久久久人人人| 欧美成人有码| 国产精品久久午夜| 伊人久久婷婷色综合98网| 欧美先锋影音| 免费观看亚洲视频大全| 欧美福利视频一区| 国产精品vvv| 国内精品久久久久久久果冻传媒| 黄色亚洲大片免费在线观看| 亚洲国产日韩欧美| 亚洲欧美成人综合| 美女久久一区| 在线天堂一区av电影| 欧美综合国产精品久久丁香| 免费黄网站欧美| 国产欧美69| 亚洲人精品午夜在线观看| 亚洲欧美久久久久一区二区三区| 久久久蜜桃一区二区人| 亚洲精品久久久蜜桃| 亚洲精品资源| 久久久国产91| 国产精品永久免费| 一区二区黄色| 亚洲电影免费观看高清| 亚洲欧美国产视频| 欧美美女日韩| 亚洲国产精品t66y| 欧美在线一区二区三区| 99国产精品久久久久老师| 久热这里只精品99re8久| 国产美女精品视频免费观看| 亚洲精品久久久久久久久久久久| 久久久久久久97| 亚洲一区二区三区777| 欧美日韩不卡| 亚洲美女av黄| 亚洲欧洲在线一区| 欧美成人精精品一区二区频| 尤物yw午夜国产精品视频明星| 欧美在线观看一二区| 一区二区三区日韩欧美| 欧美日本韩国一区二区三区| 亚洲区欧美区| 亚洲国产欧美日韩另类综合| 美女视频黄免费的久久| 在线视频国产日韩| 久久综合国产精品| 久久精品理论片| 国内精品模特av私拍在线观看| 欧美伊人影院| 午夜精品一区二区三区在线| 国产精品日韩一区二区| 性欧美激情精品| 亚洲欧美视频一区| 国产一区二区三区精品久久久| 欧美中日韩免费视频| 香蕉久久夜色精品| 黑人巨大精品欧美一区二区小视频| 久久久久欧美| 久久久久久一区| 亚洲激情成人| 一本久久青青| 99re这里只有精品6| 欧美日韩一卡| 午夜在线a亚洲v天堂网2018| 午夜亚洲视频| 亚洲国产成人91精品| 91久久精品网| 国产精品久久久久秋霞鲁丝| 欧美中文字幕| 免费在线视频一区| 亚洲一区二区视频在线观看| 亚洲视频欧美在线| 国内精品国产成人| 最新国产成人在线观看| 国产精品资源在线观看| 久久综合99re88久久爱| 欧美日韩国产大片| 欧美在线免费观看| 欧美xx视频| 香蕉久久国产| 欧美www在线| 欧美伊人久久久久久久久影院| 久久综合给合久久狠狠狠97色69| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 久久久国产91| 欧美国产日韩a欧美在线观看| 亚洲综合激情| 狼人社综合社区| 亚洲欧美网站| 免费欧美在线| 久久精品论坛| 欧美视频在线观看一区| 美国三级日本三级久久99| 欧美三级乱码| 欧美成人免费小视频| 国产精品视频一区二区三区| 欧美成人一区二区三区片免费| 国产精品超碰97尤物18| 欧美1区2区视频| 国产欧美日韩不卡免费| 亚洲另类在线一区| 亚洲激情电影中文字幕| 欧美一级视频| 亚洲欧美精品中文字幕在线| 欧美国产日韩a欧美在线观看| 久久在线视频| 国产乱码精品| 日韩亚洲欧美在线观看| 亚洲风情在线资源站| 欧美一区二区高清在线观看| 亚洲欧美经典视频| 欧美先锋影音| 一区二区激情小说| 亚洲视频在线视频| 欧美久久久久久久久| 欧美国产日韩视频| 亚洲第一精品久久忘忧草社区| 欧美亚洲一区二区在线| 午夜亚洲精品| 欧美视频一区二区在线观看 | 久久成人18免费网站| 欧美三级在线视频| 亚洲人成精品久久久久| 亚洲欧洲三级| 欧美成人精品| 91久久国产综合久久| 亚洲精品久久久蜜桃| 麻豆久久精品| 欧美激情在线播放| 亚洲精品视频一区二区三区| 免费看黄裸体一级大秀欧美| 欧美国产日韩一二三区| 亚洲国产美女| 欧美国产日韩视频| 亚洲精品欧美日韩专区| 一区二区高清视频| 国产精品户外野外| 亚洲欧美一区二区三区在线 | 一区二区三欧美| 午夜精品久久久久久久99水蜜桃 | 一区二区三区成人| 午夜精品成人在线| 国产一区二区三区视频在线观看| 久久国产夜色精品鲁鲁99| 另类av导航| 男男成人高潮片免费网站| 黑人巨大精品欧美黑白配亚洲| 欧美资源在线| 亚洲电影免费观看高清| 亚洲一区二区成人| 国产欧美韩国高清| 麻豆成人小视频| 一本色道久久综合一区| 羞羞漫画18久久大片| 有坂深雪在线一区| 欧美日韩一区二区三区四区五区| 亚洲特级片在线| 毛片av中文字幕一区二区| 亚洲黄色影院| 国产精品亚洲欧美| 欧美暴力喷水在线| 一区二区三区四区五区视频 | 亚洲美女色禁图| 久久精品动漫| 日韩一级网站| 国内精品久久久久伊人av| 欧美日韩精品一本二本三本| 亚洲欧美日韩在线不卡| 欧美激情精品久久久久久免费印度 | 亚洲欧美一区二区激情| 在线日韩欧美| 国产精品永久免费| 欧美片第一页| 久久久精品一品道一区| 一本色道婷婷久久欧美| 在线观看欧美日韩| 亚洲欧美成人一区二区在线电影| 久久影视三级福利片| 亚洲午夜免费视频| 在线精品国产成人综合| 国产精品私人影院| 欧美国产精品久久| 久久久久久黄| 亚欧成人在线| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美天堂在线观看| 免费欧美在线| 毛片一区二区|