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