COM學習筆記1_COM初步探索

COM組件的兩個重要需求:
1。 動態鏈接
2。 隱藏實現細節

COM初步探索

一個典型C++客戶和組件的例子



在COM中,推薦使用接口的指針來使用組件,上面客戶端可以改成如下工作:



接下來問題是:
1。 CA* pA = new CA ;
這裏暴露太多細節,最起碼客戶需要類CA的頭文件聲明,這裏把類CA的內部細節(私有成員)都暴露了,
而且當CA的實現細節改動,客戶端肯定需要重新編譯代碼。
另外COM組件可能不在客戶進程中,甚至在遠程機器上,這樣就不可能簡單new出組件實例。

2。delete pA ;
這裏需要顯示釋放組件。
但pIX和pIY也指向pA的對象,delete pA後如果再使用pIX等就會發生錯誤。
容易造成代碼維護困難。

解決方案是所有接口派生自IUnknown。
IUnknown提供QueryInterface,AddRef和Release接口。
另外提供函數CreateInstance。

對於上面問題1,通過CreateInstance創建組件,並返回IUnknown接口指針,
然後通過QueryInterface再獲取各種接口的指針。

對於上面問題2,每次獲取組件指針時(自動)調用AddRef,該指針不再使用時調用Release。
組件內部維護引用計數,當計數爲0時自動釋放自己。這樣就不需要手動new和delete了。

現在組件和客戶代碼如下:

發佈了59 篇原創文章 · 獲贊 9 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章