ATL學習筆記

2021-04-06 18:53:22 字數 1115 閱讀 2814

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設定...