1)
iobj01
介面定義。
2)ccomobjectrootex
,「實現」了所有介面的公共部分,即:「
addref
」和「release
」操作,但是這兩個操作的命名是:「
internaladdref
」和「internalrelease
」。3)
ccomcoclass
,定義了兩個靜態方法:
ccomcreator:: createinstance
,這個操作中,會建立乙個工廠物件,並呼叫其
setvoid
方法,將物件的建立方法傳給工廠物件,這樣工廠就知道如何建立物件了。
4)cobj01
介面實現。繼承了以上三個類,通過巨集定義:
begin_com_map(cobj01)
com_inte***ce_entry(iobj01)
com_inte***ce_entry(idispatch)
end_com_map()
填充了_atl_objmap_entry
結構體,這樣類就有了「介面——偏移量」對映關係。所以,提供
_internalqueryinte***ce
也是順利成章的。
但是,類
cobj01
沒有實現
iobj01
的方法,所以,它不能被例項化。
5)ccomobject*
,通過內部呼叫
ccomobjectrootex
的方法,實現了
iobj01
介面。所以,通過將
cobj01
作為模板引數傳遞給
ccomobject*
,就可以得到乙個可例項化的類。
6)ccommodule
,通過填充
_atl_objmap_entry
結構體,它獲得了,工廠類的建立方法和
cobj01
的建立方法。
dll對外的暴露的介面
dllgetclassobject
通過訪問全域性
ccommodule
變數訪問該元件。
大致類圖:
ATL學習筆記
整理下 atl 引用計數執行緒模型 atl 臨界區 atl 核心com繼承類之ccomobjectrootex及ccomobjectlock atl 核心com繼承類之idispatchimpl及呼叫 atl com類之啟用 atl 介面對映 atl 執行緒池的使用 atl ccomcreator ...
ATL學習筆記 一
atl 即活動模板庫,是一套基於模板的 c 類,使用這些類可以容易地建立小型 快速的元件物件模型 com 物件。它具有對主要 com 功能的特殊支援,包括 iunknown iclassfactory iclassfactory2 和 idispatch 的常用實現 雙重介面 標準 com 列舉數介...
ATL 學習備忘錄
1.編繹錯誤 error lnk2005 x already defined in atlmincrt.lib atlinit.obj 解決辦法 開啟release版本的專案配置項,把configuration properties general minimize crt use in atl設定...