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會如此受到人們喜愛,因為它的封裝,介面實現分離。很多優點,我也不多說了
我學習的習慣是第一遍看懂,瀏覽,然後再回頭重新學習一遍
這個就是記錄一下學習過程,等全部學完再整理一下。