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