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

無我

讓內(nèi)心永遠燃燒著偉大的光明的精神之火!
靈活的思考,嚴謹?shù)膶崿F(xiàn)
豪邁的氣魄、頑強的意志和周全的思考

【轉】什么是COM組件

什么是COM組件

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

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

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

 

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

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

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

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

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

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

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

FAQ8QueryInterface的樣子?〖第三章〗

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

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

 

Question

什么是COM組件?

Answer:

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

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

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

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

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

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

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

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

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

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

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

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

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

Question

  組件不是……?

Answer:

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

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

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

COM組件不是類

Question

  什么是接口?

Answer:

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

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

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

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

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

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

Question

  接口的作用是什么?

Answer:

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

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

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

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

 

Question

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

Answer:

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

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

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

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

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

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

 

Question

  什么是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;

  }

 

Question

  QueryInterface函數(shù)的作用是什么?

Answer:

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

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

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

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

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

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

Question

  QueryInterface函數(shù)的實現(xiàn)規(guī)則是什么?

Answer:

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

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

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

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

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

Question

  QueryInterface函數(shù)的參數(shù)IID是什么?

Answer:

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

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

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

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

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

 

Question

  何時需要建立一個新的COM組件版本?

Answer:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

posted on 2007-10-28 10:38 Tim 閱讀(3399) 評論(0)  編輯 收藏 引用 所屬分類: 資源共享

<2011年3月>
272812345
6789101112
13141516171819
20212223242526
272829303112
3456789

導航

統(tǒng)計

公告

本博客原創(chuàng)文章,歡迎轉載和交流。不過請注明以下信息:
作者:TimWu
郵箱:timfly@yeah.net
來源:www.shnenglu.com/Tim
感謝您對我的支持!

留言簿(9)

隨筆分類(173)

IT

Life

搜索

積分與排名

最新隨筆

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            妖精视频成人观看www| 亚洲一区二区欧美| 久久国产精品一区二区三区| 亚洲精品中文字幕在线| 韩国在线一区| 国产精品国产三级国产专播品爱网 | 久久综合给合久久狠狠狠97色69| 一本色道久久综合狠狠躁篇的优点 | 美国三级日本三级久久99| 亚洲欧美激情精品一区二区| 亚洲精品综合久久中文字幕| 亚洲第一视频网站| 国精品一区二区| 国产欧美日本一区视频| 欧美日韩在线不卡| 欧美欧美在线| 欧美另类一区| 欧美肥婆bbw| 欧美成人嫩草网站| 欧美超级免费视 在线| 久久这里有精品15一区二区三区| 久久国产精品72免费观看| 亚洲欧美日韩爽爽影院| 亚洲欧美在线看| 亚洲欧美电影院| 亚洲综合二区| 亚洲男女自偷自拍| 午夜精品福利电影| 午夜精品一区二区三区电影天堂| 亚洲一区二区三区777| 亚洲一区二区视频在线| 中文精品一区二区三区| 一区二区av| 亚洲在线免费观看| 亚洲在线观看视频| 欧美一区二区三区四区在线 | 亚洲激情偷拍| 亚洲精品久久视频| 99视频精品免费观看| 一区二区三区精密机械公司| 日韩一区二区精品葵司在线| 在线一区观看| 亚洲欧美中文在线视频| 久久精品30| 免费在线观看精品| 亚洲国产精品久久久久秋霞不卡 | 亚洲激情偷拍| 一本久久综合亚洲鲁鲁| 亚洲一级片在线看| 欧美一区二区在线| 老司机成人网| 亚洲高清电影| 一二三区精品福利视频| 亚洲一区二区综合| 久久精品一区二区国产| 欧美jizzhd精品欧美巨大免费| 欧美精品在线网站| 国产精品推荐精品| 在线成人h网| 一本久道久久久| 欧美亚洲一区在线| 男人的天堂亚洲| 99在线|亚洲一区二区| 午夜电影亚洲| 欧美成人一二三| 国产精品久久看| 在线看片成人| 亚洲制服欧美中文字幕中文字幕| 久久er精品视频| 亚洲国产第一页| 亚洲欧美精品suv| 你懂的国产精品永久在线| 国产精品国产馆在线真实露脸| 国内久久婷婷综合| 日韩视频在线一区二区三区| 欧美在线免费视屏| 91久久精品国产91久久性色tv| 亚洲在线1234| 免费看成人av| 国产三级欧美三级日产三级99| 亚洲黄色三级| 久久久91精品国产一区二区精品| 亚洲三级毛片| 久久精品一区二区三区不卡| 欧美性色aⅴ视频一区日韩精品| 在线观看久久av| 亚洲女同精品视频| 亚洲国产成人精品久久久国产成人一区| 亚洲综合首页| 欧美精品自拍| 在线欧美电影| 久久国产精品久久久久久久久久| 亚洲精品在线三区| 蜜臀av性久久久久蜜臀aⅴ| 国产日韩亚洲欧美精品| 亚洲午夜精品久久久久久app| 欧美成人一区二区三区在线观看 | 美女视频网站黄色亚洲| 国产精品无人区| 一区二区免费看| 欧美黄色小视频| 久久精品国产99国产精品澳门| 国产精品国产三级国产aⅴ浪潮| 亚洲美女在线一区| 欧美成人免费小视频| 欧美影院在线播放| 国产精品日日做人人爱| 亚洲视频欧美在线| 亚洲国内自拍| 欧美sm视频| 亚洲激情网站免费观看| 老牛嫩草一区二区三区日本| 午夜在线精品| 国产乱理伦片在线观看夜一区 | 国产精品久久久久免费a∨| 99riav国产精品| 亚洲国产高清aⅴ视频| 久久手机免费观看| 在线看日韩欧美| 另类尿喷潮videofree| 欧美一区国产二区| 国产综合精品| 久久欧美肥婆一二区| 久久99在线观看| 一区在线播放视频| 免费观看在线综合色| 久久精品国产亚洲aⅴ| 韩国一区二区三区在线观看| 久久中文久久字幕| 久久久国产一区二区| 在线看日韩欧美| 亚洲大胆在线| 欧美另类专区| 亚洲一区二区三区四区视频| 一本久久知道综合久久| 国产精品一二| 久久久www成人免费毛片麻豆| 欧美一区成人| 好吊妞**欧美| 欧美国产精品日韩| 欧美看片网站| 一区二区免费在线播放| 在线视频欧美日韩精品| 国产伦精品一区二区三区视频孕妇| 亚洲欧美一区二区在线观看| 小黄鸭精品密入口导航| 在线观看欧美一区| 欧美va日韩va| 欧美日韩成人一区二区| 亚洲在线成人精品| 欧美在线在线| 亚洲激情社区| 中文国产成人精品久久一| 国产精品影视天天线| 久久久精品一区二区三区| 麻豆精品视频在线| 亚洲一区二区网站| 久久国产精品高清| 日韩网站在线看片你懂的| 一区二区三区鲁丝不卡| 黄色国产精品一区二区三区| 亚洲高清资源| 国产精品一级| 欧美国产日韩一区二区三区| 欧美大成色www永久网站婷| 亚洲欧美99| 久久伊人精品天天| 亚洲亚洲精品三区日韩精品在线视频| 欧美亚洲一区二区在线| 亚洲日韩中文字幕在线播放| 亚洲一区制服诱惑| 亚洲激情偷拍| 亚洲男同1069视频| 亚洲欧洲综合另类| 亚洲欧美综合精品久久成人| 亚洲老板91色精品久久| 亚洲欧美日韩另类| 91久久中文| 午夜在线精品偷拍| 在线视频日韩| 久久永久免费| 欧美在线免费视屏| 欧美日韩久久久久久| 免费在线播放第一区高清av| 国产精品三级久久久久久电影| 欧美国产视频在线观看| 国产精品一区二区你懂得| 亚洲激情一区| 在线免费观看日韩欧美| 亚洲一区影院| 亚洲午夜国产一区99re久久| 久久亚洲高清| 欧美中文字幕不卡| 欧美视频在线观看一区| 亚洲国产mv| 尤物yw午夜国产精品视频明星| 亚洲一区二区三区中文字幕在线| 91久久国产自产拍夜夜嗨| 久久gogo国模啪啪人体图| 亚洲综合欧美|