1. COM套间的由来
为了解决COM组件在多线程环境下临界资源的访问。
2. COM套间的类型
1) 客户端程序创建的COM线程模型
a) 单线程套间(STA)
单线程套间可以保证,调用COM对象的方法被顺序执行,COM库所做的幕后工作是在我们调用CoInitializeEx(NULL,COINIT_APARTMENTTHREADED)的时候,会生成一个隐藏窗口,对COM对象所有的调用,都会发消息到线程的消息队列,最终到隐藏窗口的窗口过程调用COM对象的相关方法,由于消息队列是线性执行的,所以保证了COM对象的调用为串行调用。
CoInitializeEx(NULL,COINIT_APARTMENTTHREADED);
上述代码使用COM库函数创建了一个STA,并把当前线程放入STA中,一个STA只关联一个线程,只有这个线程才能直接调用它创建的COM对象。
如果其他线程需要使用该对象,可以通过以下两种方式:
l 列集和散集CoMarshalInterThreadInterfaceInStreamCoGetInterfaceAndReleaseStream。
线程A调用CoMarshalInterThreadInterfaceInStream列集接口指针,线程B调用CoGetInterfaceAndReleaseStream进行散集。通过函数CoGetInterfaceAndReleaseStream,C