通过实际代码验正:
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
鹿哥 阅读(522)
评论(0) 编辑 收藏 引用 所属分类:
COM