随笔 - 3  文章 - 8  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(3)

随笔档案

文章分类

文章档案

COM相关技术

搜索

  •  

最新评论

阅读排行榜

评论排行榜

套间有两种类型:
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 鹿哥 阅读(399) 评论(0)  编辑 收藏 引用 所属分类: COM

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理