• <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  評論-8  文章-0  trackbacks-0

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

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

            CoCreateInstance

                  圖片說明了一切。對比一下 CoCreateInstance 的聲明:

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

                  其中,兩個InUnk都是非代理IUnknown。

                  這樣一來,對于外部組件來說:

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

                  對于內部組件來說:

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

             

                  所有的 QueryInterface 動作都直接或間接的由外部組件執行。

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

                  但我怎么可能進去就睡著了呢!

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

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

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

            評論:
            # re: 《Inside Com》小結(一) 2011-01-11 22:50 | WarWithinMe
            請問博主有inside com英文電子版嗎?  回復  更多評論
              
            # re: 《Inside Com》小結(一)[未登錄] 2011-01-11 23:39 | Rich
            沒有。我看的是網上找的掃描版。@WarWithinMe
              回復  更多評論
              
            # re: 《Inside Com》小結(一) 2016-04-22 16:05 | 崇文
            變形金剛2 也是很久遠的電影了,老了。  回復  更多評論
              
            精品国产乱码久久久久软件| 国内精品久久久久久不卡影院 | 精品国产91久久久久久久| 性色欲网站人妻丰满中文久久不卡| 色天使久久综合网天天| 国产精品岛国久久久久| 久久亚洲中文字幕精品一区四| 久久精品国产色蜜蜜麻豆| 久久九九亚洲精品| 久久九九兔免费精品6| 久久亚洲精品视频| 久久久久人妻一区精品性色av| 91麻精品国产91久久久久 | 精品久久一区二区| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产精品亚洲综合专区片高清久久久 | 99久久国产综合精品五月天喷水| 2021最新久久久视精品爱 | 久久精品一区二区| 久久综合噜噜激激的五月天 | 国产成人精品白浆久久69| 亚洲人成网站999久久久综合| 91久久精品国产成人久久| 亚洲乱码中文字幕久久孕妇黑人| 九九久久精品无码专区| 青青青青久久精品国产h| 久久国产精品99国产精| 无码人妻久久一区二区三区 | 久久最近最新中文字幕大全| 亚洲午夜久久久久妓女影院 | 久久综合给久久狠狠97色| 国产精品久久久香蕉| 欧美精品福利视频一区二区三区久久久精品| 久久精品亚洲精品国产色婷| 久久国产AVJUST麻豆| 中文字幕无码久久久| 亚洲欧洲中文日韩久久AV乱码| 亚洲精品国精品久久99热| 欧美伊人久久大香线蕉综合| 综合久久精品色| 中文字幕热久久久久久久|