• <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>
            隨筆-14  評(píng)論-8  文章-0  trackbacks-0

                  前不久看完了《Inside Com》。書寫得非常棒,有了這個(gè)基礎(chǔ),打算繼續(xù)研究《Com  本質(zhì)論》。下面是我看完此書記錄下來的一些東西:

                  1. CoCreateInstance 的調(diào)用過程(這里的組件位于 DLL 中):

            CoCreateInstance

                  圖片說明了一切。對(duì)比一下 CoCreateInstance 的聲明:

            WINOLEAPI CoCreateInstance(__in        REFCLSID    rclsid,
            __in_opt    LPUNKNOWN   pUnkOuter,
            __in        DWORD       dwClsContext,
            __in        REFIID      riid,
            __deref_out LPVOID FAR* ppv);
                值得一提的是 CoGetClassObject 調(diào)用了 Dll 的導(dǎo)出函數(shù) DllGetClassObject ,Regsvr32 /s /u 當(dāng)然是使用了對(duì)應(yīng)的 DllRegisterServer / DllUnregisterServer 導(dǎo)出函數(shù)。如果使用 ATL,這一切繁雜的工作都省卻了,但反注冊還需手動(dòng)操作……
                2. 獲取聚合組件接口的過程:
                理解組件聚合技術(shù)是一次痛苦的經(jīng)歷。前后三天,苦苦思索,我終于在那個(gè)陰冷的下午獲得了“安東尼達(dá)斯”的垂青。如果他早一點(diǎn)給我一瓶智力藥水,何至如此呢!看圖說話:
            aggrgation 

                  其中,兩個(gè)InUnk都是非代理IUnknown。

                  這樣一來,對(duì)于外部組件來說:

              IX   Outer->QueryInterface
            獲取    
              IY   InUnkO->QueryInterface

                  對(duì)于內(nèi)部組件來說:

              IX   OutUnk->QueryInterface->InUnkO->QueryInterface
            獲取    
              IY   OutUnk->QueryInterface

             

                  所有的 QueryInterface 動(dòng)作都直接或間接的由外部組件執(zhí)行。

                  這讓我想起了《變形金剛2》。假如我一進(jìn)電影院就睡著了,等到天火和擎天柱組合之后我才醒來。那么對(duì)于我來說,擎天柱就是外部組件,IX為跑。天火為內(nèi)部組件,IY為飛。此時(shí)我不知道有天火的存在。當(dāng)我問擎天柱你會(huì)飛嗎的時(shí)候,他知道他不會(huì)飛(沒有IY接口),于是他問天火你會(huì)不會(huì)飛,天火就返回IY(飛)接口,于是擎天柱告訴我他會(huì)飛。當(dāng)他飛著的時(shí)候(我想通過IY來查詢IX),我問他會(huì)跑么,這句話只有天火聽得見(因?yàn)槲矣玫氖荌Y接口),天火不會(huì)跑,他就問擎天柱,擎天柱知道自己會(huì)跑(有IX接口),于是就給我一個(gè)IX接口。整個(gè)過程中,我只知道擎天柱,并不知道天火的存在,于是擎天柱聚合了天火。

                  但我怎么可能進(jìn)去就睡著了呢!

                  內(nèi)部組件的代理接口只是簡單的調(diào)用外部的QueryInterface,是個(gè)轉(zhuǎn)發(fā)站,一切工作交由外部組件統(tǒng)籌。關(guān)于具體實(shí)現(xiàn),《COM本質(zhì)論》中給出的 "impunk.h" 頭文件中有很好的實(shí)現(xiàn)。我非常喜歡其中關(guān)于接口查找表的實(shí)現(xiàn),那個(gè)offset獲取偏移地址的方法讓我這個(gè)C語言功力薄弱的人感到十分慚愧。

                  過兩天再把套間線程和自由線程整理出來。

            posted on 2009-12-05 20:16 崇文 閱讀(1234) 評(píng)論(3)  編輯 收藏 引用

            評(píng)論:
            # re: 《Inside Com》小結(jié)(一) 2011-01-11 22:50 | WarWithinMe
            請問博主有inside com英文電子版嗎?  回復(fù)  更多評(píng)論
              
            # re: 《Inside Com》小結(jié)(一)[未登錄] 2011-01-11 23:39 | Rich
            沒有。我看的是網(wǎng)上找的掃描版。@WarWithinMe
              回復(fù)  更多評(píng)論
              
            # re: 《Inside Com》小結(jié)(一) 2016-04-22 16:05 | 崇文
            變形金剛2 也是很久遠(yuǎn)的電影了,老了。  回復(fù)  更多評(píng)論
              

            只有注冊用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久这里都是精品| 热久久视久久精品18| 99久久人人爽亚洲精品美女| 91精品国产高清久久久久久91 | 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 色天使久久综合网天天| 97热久久免费频精品99| 欧美性大战久久久久久 | 久久精品国产亚洲Aⅴ香蕉| 久久中文骚妇内射| 狠狠色丁香婷婷久久综合五月 | 国产叼嘿久久精品久久| 久久久无码精品亚洲日韩按摩| 精品久久国产一区二区三区香蕉 | 久久超碰97人人做人人爱| 老司机午夜网站国内精品久久久久久久久| 看久久久久久a级毛片| 亚洲精品无码久久毛片| 久久久久无码中| 91精品国产综合久久精品| 色偷偷偷久久伊人大杳蕉| 亚洲人成无码www久久久| 色婷婷综合久久久久中文字幕 | 久久综合给合久久狠狠狠97色69| 亚洲欧美日韩精品久久亚洲区 | 国产精品免费久久久久影院| 狠色狠色狠狠色综合久久| 国产三级久久久精品麻豆三级 | 三级片免费观看久久| 久久综合九色欧美综合狠狠| 久久国产精品国语对白| 久久精品成人| 伊色综合久久之综合久久| 亚洲伊人久久成综合人影院| 亚洲精品国产第一综合99久久| 伊人久久五月天| 无码人妻精品一区二区三区久久| 久久久久亚洲Av无码专| 伊人久久综在合线亚洲2019 | 色婷婷噜噜久久国产精品12p| 亚洲欧美国产日韩综合久久|