套间有两种类型:
1>单线程套间 STA
2>多线程套间 MTA
3>临介区套间 RTA(未来可能会新增)
其中 单线程套间 在一个进程中可以有多个.
而 多线程套间 在一个进程中只能有一个.
单线程套间 与相关的线程是1对1的关系.
多线程套间 与相关的线程是1对多的关系.
一般情况下 套间 与 套间之间防问,都需要进行序列化处理.
而如果在同一进程下 的 单线程套间 防问多线程套间COM会自动进行优化处理.
单线程套间应该有消息循环,去把对它们的调用转成序列化.
在同一进程的情况下:
STA是通过把调用转成 消息再由拥有该STA的线程去处理.
MTA则是可以直接调用.
RTA与STA类似,但它的实现方式是为调用加把锁,然后其它套间调用它的时候就锁住。
与STA不同的是调用在RTA中的对象是发起调用的那个线程,而不是拥有RTA的那个线程。
在不同进程下:
所有调用都会通过 代理\存根 进行序列化处理
进程外:
CoMarshalInterface
CoUnmarshalInterface
CreateStreamOnHGlobal //创建与获取内存流
GetHGlobalFromStream
进程内用的简化函数:
CoMarshalInterThreadInterfaceInStream
CoGetInterfaceAndReleaseStream
声明为Free的COM对象,为什么在本地STA套间中访问会慢些?
COM把所有细节问题都集结到一个点上:如何正确的获取接口?'
代理接口指针的列集会有问题,因此引入:
GIT Global Interface Table
IGlobalInterfaceTable
posted on 2009-01-12 11:03
鹿哥 阅读(410)
评论(0) 编辑 收藏 引用 所属分类:
COM