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

隨筆-80  評論-22  文章-0  trackbacks-0

COM是開發軟件組件的一種方法。組件實際上是一些小的二進制可執行程序,它們可以給應用程序,操作系統以及其他組件提供服務。開發自定義的COM組件就如同開發動態的,面向對象的API。多個COM對象可以連接起來形成應用程序或組件系統。


     COM是Component Object Model (組件對象模型)的縮寫。

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

  COM component(COM組件)

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

  COM是開發軟件組件的一種方法。組件實際上是一些小的二進制可執行程序,它們可以給應用程序,操作系統以及其他組件提供服務。開發自定義的COM組件就如同開發動態的,面向對象的API。多個COM對象可以連接起來形成應用程序或組件系統。并且組件可以在運行時刻,在不被重新鏈接或編譯應用程序的情況下被卸下或替換掉。Microsoft的許多技術,如ActiveX, DirectX以及OLE等都是基于COM而建立起來的。并且Microsoft的開發人員也大量使用COM組件來定制他們的應用程序及操作系統。

  COM所含的概念并不止是在Microsoft Windows操作系統下才有效。COM并不是一個大的API,它實際上象結構化編程及面向對象編程方法那樣,也是一種編程方法。在任何一種操作系統中,開發人員均可以遵循“COM方法”。

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

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

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

  COM,即組件對象模型,是關于如何建立組件以及如何通過組件建立應用程序的一個規范,說明了如何可動態交替更新組件。


  使用組件的優點:

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

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

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

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

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


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

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

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

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

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


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

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


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

  這是第一部分,包含前3章的內容。

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

  Answer:

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

  COM組件是遵循COM規范編寫的

  COM組件是一些小的二進制可執行文件

  COM組件可以給應用程序、操作系統以及其他組件提供服務

  自定義的COM組件可以在運行時刻同其他組件連接起來構成某個應用程序

  COM組件可以動態的插入或卸出應用

  COM組件必須是動態鏈接的

  COM組件必須隱藏(封裝)其內部實現細節

  COM組件必須將其實現的語言隱藏

  COM組件必須以二進制的形式發布

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

  COM組件可以透明的在網絡上被重新分配位置

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

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

  Answer:

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

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

  COM組件不是一個API函數集。

  COM組件不是類

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

  Answer:

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

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

  DLL的接口就是它所輸出的那些函數。

  C++類的接口就是該類的成員函數集。

  COM中的接口是一組由組件實現的提供給客戶使用的函數。

  在COM中接口是一個包含函數指針數組的內存結構,數組元素是一個由組件實現的函數地址。

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

  Answer:

  有了組件如何將它們連接起來構成某個應用程序,需要用接口。

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

  說明接口可以保護系統免受外界變化的影響。這是封裝的體現。

  接口實現了使用戶使用同樣的方式來處理不同的組件。這是多態的體現。

  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;

  }

  FAQ6:QueryInterface函數的作用是什么?〖第三章〗

  Answer:

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

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

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

  QueryInterface函數可以使用if…then…else語句、數組、散列表、樹來實現。

  QueryInterface函數不能使用case語句,因為QueryInterface函數返回的是一個HRESULT結構而不是一個數。

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

  FAQ7:QueryInterface函數的實現規則是什么?〖第三章〗

  Answer:

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

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

  客戶可以再次獲得已經擁有的接口。

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

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

  FAQ8:接口的如何實現?

  Answer:

  COM接口在C++中是用純抽象基類實現。

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

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

  組件可以支持任意數目的接口。

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

  要精心設計實現接口,以使之能夠支持各種不同的實現。

  FAQ9:QueryInterface函數的參數IID是什么?〖第三章〗

  Answer:

  它是一個結構,接口標識符結構。

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

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

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

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

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

  Answer:

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

  接口中函數的數目發生改變時。

  接口中函數的順序發生改變。

  接口中某個函數的參數發生改變

  接口中某個函數的參數的順序發生改變

  接口中某個函數的參數的類型發生改變

  接口中函數的返回值發生改變

  接口中函數的返回值類型發生改變

  接口中函數的參數的含義發生改變

  接口中函數的含義發生改變


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

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

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

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

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

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


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

posted on 2009-08-06 16:40 Bluesea 閱讀(547) 評論(0)  編輯 收藏 引用 所屬分類: COM

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            午夜亚洲激情| 欧美日韩一区二区在线| 另类春色校园亚洲| 亚洲美女视频在线免费观看| 性色av香蕉一区二区| 欧美日韩日韩| 日韩午夜av| 欧美激情片在线观看| 久久久天天操| 国产在线观看91精品一区| 香蕉成人伊视频在线观看 | 欧美国产高清| 久久精品国产亚洲一区二区| 国产性天天综合网| 欧美一级午夜免费电影| 亚洲性夜色噜噜噜7777| 国产精品羞羞答答| 久久国产精品一区二区三区| 欧美在现视频| 国产一区二区精品| 蜜桃久久av一区| 免费精品视频| 99视频一区| 一本色道久久| 国产亚洲精品美女| 另类激情亚洲| 欧美va日韩va| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲最新在线视频| 国产欧美日韩不卡免费| 老司机成人在线视频| 免费在线播放第一区高清av| 亚洲卡通欧美制服中文| 99视频精品| 国产日产欧美精品| 欧美成人午夜激情| 欧美日韩在线免费观看| 久久精品欧美| 欧美日本一区二区三区| 欧美在线一级va免费观看| 久久免费视频在线观看| 夜夜嗨av一区二区三区免费区| 宅男66日本亚洲欧美视频| 国产日韩综合一区二区性色av| 另类激情亚洲| 欧美深夜影院| 欧美成人中文字幕在线| 国产精品国产三级国产专播品爱网| 久久精品国产久精国产一老狼 | 国产精品成人一区二区| 久久久xxx| 欧美激情综合五月色丁香| 欧美一区二区三区播放老司机| 久久人人爽人人爽爽久久| 宅男精品视频| 久久婷婷人人澡人人喊人人爽 | 久久综合久久综合久久| 国产伦精品一区二区三| 亚洲精品久久久久久久久久久久| 99pao成人国产永久免费视频| 国产欧美精品一区aⅴ影院| 裸体丰满少妇做受久久99精品| 欧美久久电影| 久久精品国产96久久久香蕉| 欧美精品综合| 免费日韩成人| 欧美午夜精品久久久久久超碰| 美国成人直播| 国产精品免费看片| 亚洲高清一二三区| 欧美日韩综合网| 欧美成人激情在线| 国产亚洲午夜| 亚洲主播在线| 亚洲一区亚洲二区| 欧美a级片网站| 免费久久99精品国产自| 国产日韩欧美91| 亚洲综合精品自拍| 亚洲天堂成人在线视频| 欧美精品成人| 亚洲国产婷婷综合在线精品 | 一本久久a久久精品亚洲| 黄色一区二区三区四区| 一区二区高清视频在线观看| 1204国产成人精品视频| 午夜伦欧美伦电影理论片| 在线一区二区日韩| 欧美激情aⅴ一区二区三区| 久久亚洲国产成人| 国产视频综合在线| 午夜久久久久久久久久一区二区| 午夜欧美大尺度福利影院在线看| 欧美日韩的一区二区| 最新成人在线| 久久久噜噜噜久久中文字免| 日韩午夜免费视频| 欧美高清视频在线播放| 欧美激情第一页xxx| 精品动漫一区| 亚洲黄页一区| 亚洲黄色影院| 美国成人直播| 亚洲电影免费观看高清完整版在线观看 | 亚洲欧美日韩综合国产aⅴ| 欧美日韩在线播放三区四区| 亚洲精品美女久久7777777| 亚洲免费av片| 欧美日本乱大交xxxxx| 99国内精品久久| 亚洲专区国产精品| 国产欧美激情| 亚洲主播在线播放| 欧美一区二区视频在线观看2020| 国产精品久久国产愉拍| 亚洲一区在线观看视频 | 亚洲免费一区二区| 国产精品乱码一区二区三区| 一本一本a久久| 欧美一区二区在线观看| 国产婷婷色一区二区三区四区| 久久精品99国产精品| 蜜桃伊人久久| 一区二区三区国产精华| 国产精品乱码妇女bbbb| 久久久91精品国产一区二区三区| 牛牛精品成人免费视频| 亚洲一区二区三区四区五区午夜| 国产精品欧美久久久久无广告| 亚洲欧美欧美一区二区三区| 久久躁狠狠躁夜夜爽| 亚洲人成人77777线观看| 欧美三级小说| 久久精品免费播放| 亚洲三级免费| 久久精品中文字幕一区| 亚洲乱码国产乱码精品精可以看 | 欧美在线视频播放| 国内偷自视频区视频综合| 欧美成人一区二区三区在线观看 | 久久综合狠狠| 在线视频欧美一区| 久久夜精品va视频免费观看| 一区二区三区欧美| 国模大胆一区二区三区| 欧美色欧美亚洲另类二区| 久久久久久亚洲精品杨幂换脸 | 欧美国产高潮xxxx1819| 亚洲欧美偷拍卡通变态| 亚洲电影免费观看高清| 国产精品免费一区二区三区观看| 久久综合久久美利坚合众国| 夜夜精品视频一区二区| 欧美肥婆在线| 久久漫画官网| 亚洲欧美中文字幕| 亚洲日韩中文字幕在线播放| 国产欧美不卡| 欧美视频在线观看| 免费不卡视频| 久久精品国产亚洲aⅴ| 亚洲视频综合在线| 亚洲人精品午夜| 男同欧美伦乱| 久久久久一区| 久久久久国产免费免费| 亚洲欧美日韩在线一区| 中日韩视频在线观看| 亚洲人久久久| 亚洲欧洲一区二区三区在线观看| 国产日韩欧美中文在线播放| 欧美午夜不卡视频| 久久手机精品视频| 久久久999成人| 午夜精品久久久久久久99黑人| 亚洲蜜桃精久久久久久久| 榴莲视频成人在线观看| 日韩系列在线| 久久久水蜜桃| 久久九九99| 久久久精品一区| 久久er99精品| 久久九九热re6这里有精品| 欧美自拍丝袜亚洲| 欧美专区日韩专区| 久久精品九九| 久久国内精品视频| 久久久99精品免费观看不卡| 久久精品女人天堂| 久久资源在线| 亚洲国产精品99久久久久久久久| 亚洲国产欧美一区二区三区久久| 亚洲国产成人久久| 亚洲欧洲美洲综合色网| 亚洲黄色有码视频| 亚洲一区二区三区视频| 欧美亚洲视频在线看网址| 欧美在线视频二区| 欧美精品在线一区| 午夜在线电影亚洲一区|