COM學習筆記(第一天)

來源:互聯網
上載者:User

com學習筆記
學習教材:COM本質論
暫且記錄,然後整理

2006-03-07 10:33
介面繼承(interface inheritance)

第一章 com是更好的C++
代碼重用的缺點:為了實現沖用,必須要理解其他開發人員的設計和變成風格……,
//這句話說的很好,說到我心裡去了
軟體分發,如果直接以代碼形式分發,即將類編譯到客戶程式中,那麼除了佔用不必要的空間,還對更新造成很

大的困難。因為,如果類被改變,或者發現存在某種錯誤,就需要重新編譯用戶端程式。
//讀到這裡我已經感覺COM確實是個好東西,原諒我沒有早一點學習它。
使用dll是否能解決上面的問題呢?
使用DLL確實能部分解決上面的問題,但是,dll存在的問題是不同的編譯器產生的dll之間可能不能協同工作,

“不足以建立‘廠商獨立的組件軟體’”
//com是二進位形式分發的,所以,不存在不同廠商組件之間的相容問題。
c++的封裝問題(使用dll的又一個問題)。c++的編譯模型要求客戶的編譯器能夠訪問與對象的記憶體布局有關的

所有資訊,這樣才能構造執行個體。假設客戶程式使用了一個dll,在dll中定義了一個類,在客戶程式編譯的過程中

,編譯器得到dll中定義類的大小,並為其分配記憶體(這個分配的記憶體空間大小在程式運行期間是固定的),如

果我們有新版本的dll,這個dll中的類被修改,類的大小被改變了。分發之後,如果還是用以前編譯的客戶程式

調用這個dll就會出現錯誤,因為程式為其分配的記憶體不能滿足要求了。

控制代碼類:一個類表示介面,一個類表示實現。在介面類中儲存實現的控制代碼。這樣實現了介面和實現的分離,實現

的修改不會影響到現有的系統。可以部分解決編譯器/連接器相容性問題。

介面類的虛函數總是通過儲存在vtbl中的函數指標被間接調用,客戶程式不需要在開發時候連結這些函數的符號

名。唯一需要通過名字顯式連結的入口函數是CreateFastString,這個全域函數一exern "C"引出,避免了符號名

改編方式的衝突。
運行時多態
對象擴充性。介面不變形

建立COM,從代碼重用,到dll,再到介面實現分離,到虛函數的介面實現。
//明白了我們為什麼需要com,實現二進位層級的代碼重用。為什麼com會如此受到人們喜愛,因為它的封裝,介面實現分離。很多優點,我也不多說了

我學習的習慣是第一遍看懂,瀏覽,然後再回頭重新學習一遍
這個就是記錄一下學習過程,等全部學完再整理一下。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.