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