????????????一個(gè)COM對象必須實(shí)現(xiàn)IUnknown接口所規(guī)定的功能,即生命期管理和運(yùn)行時(shí)類型轉(zhuǎn)換。
(1)基本IUnknow功能
??????????? 對象的生存方式可以是堆存儲(chǔ)、棧存儲(chǔ)以及全局存儲(chǔ),同時(shí)COM還提供了一種被聚合的生存方式。生存方式不同,AddRef、Release和QueryInterface的實(shí)現(xiàn)方式就不同。比如:對于堆方式,Release要在引用計(jì)數(shù)歸零時(shí)負(fù)責(zé)釋放堆空間,而棧以及全局方式則不必;對于聚合方式,AddRef、Release以及大部分的QueryInterface調(diào)用要委托給外部對象。
??????????? 為了達(dá)到對象的邏輯功能與其生存方式的分離,COM把對IUnknown基本功能的實(shí)現(xiàn)推遲到類層次結(jié)構(gòu)的最底層,即CComObject(或它的其他伙伴)處。
??????????? CComObjectRootBase為CComObject的實(shí)現(xiàn)提供原材料的支持,如提供引用計(jì)數(shù)變量、基本的接口查詢機(jī)制等,它是一個(gè)“功能集中類”。
(2)套間安全支持
??????????? 根據(jù)對象所處的套間類型,對象功能的實(shí)現(xiàn)需要不同的同步支持。對于單線程套間對象,由COM庫來保證訪問的同步;而對于多線程套間對象,需要自己來同步調(diào)用。為了使套間安全支持與邏輯功能分離,ATL提供了一組提供線程安全操作支持的特征類(traits類)—— CComSingleThreadModel及其伙伴。它們提供了對一個(gè)LONG變量“恰好線程安全”的增減操作,以及跟套間類型匹配的CriticalSection功能類。
??????????? ATL同時(shí)提供了CComObjectRootEx模板類,它以某種ThreadModel特征類作為參數(shù),提供對引用計(jì)數(shù)“恰好線程安全”的操作,并且提供了一個(gè)用于對象同步的鎖。
????????????PS:“恰好線程安全”的操作的意思是:對于需要線程同步的對象,提供win32 CriticalSection支持;對于不需要的對象,則什么也不做。
posted on 2007-04-06 11:46
michael 閱讀(1392)
評論(0) 編輯 收藏 引用 所屬分類:
心得