通過實(shí)際代碼驗(yàn)正:
1>COM里面確實(shí)存在套間。
2>進(jìn)程內(nèi)套間的同步防問確實(shí)走的是WINDOWS消息機(jī)制。
3>要是創(chuàng)建COM對(duì)象的那個(gè)套間被銷毀了, 也不會(huì)說自動(dòng)把該COM對(duì)象移到主套間中去。
那么其它調(diào)用該COM對(duì)象的操作都將被阻塞。
即使調(diào)用IUnknown接口中的三個(gè)基本函數(shù),雖然并不會(huì)被阻塞,但內(nèi)部還是會(huì)產(chǎn)生下面類似的異常:
(被呼叫方(服務(wù)器 [不是服務(wù)器應(yīng)用程序])不可用并已消失。所有連接均無效。沒有執(zhí)行呼叫。)
至于MTA套間里的COM對(duì)象應(yīng)該不會(huì)出現(xiàn)這個(gè)問題,因?yàn)镸TA套間在程序中只有一個(gè),并且一但創(chuàng)建,
不大可能會(huì)被銷毀。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在進(jìn)程內(nèi)多個(gè)套間使用CoMarshalInterface等函數(shù) 共用接口的時(shí)候,
由CreateStreamOnHGlobal創(chuàng)建的流還是最好用GetHGlobalFromStream來獲取其HGLOBAL內(nèi)存句柄,
然后在相應(yīng)套間中重新創(chuàng)建IStream 。要是 CoMarshalInterface 與 CoUnmarshalInterface 都用同一個(gè)IStream進(jìn)行讀寫的話,
會(huì)在多于2個(gè)套間的情況下產(chǎn)生莫名奇妙的錯(cuò)誤。
posted on 2009-01-12 17:01
鹿哥 閱讀(542)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
COM