避免COM编组

时间:2012-10-28 22:55:20

标签: com marshalling inproc

我对com线程模型有点困惑。

我有一个inproc服务器,我想创建一个可从任何线程访问的接口,而不管CoInitializeEx中使用的线程模型和/或标志。

当从一个线程传递接口到另一个线程时,我使用CoMarshalInterface / CoUnmarshalInterface没有问题,但我想知道是否存在任何方法来避免这种情况并直接传递接口指针。

我尝试让界面使用中性公寓,但仍然需要调用CoMarshalInterface / CoUnmarshalInterface以避免出现问题。

此致 莫罗。

1 个答案:

答案 0 :(得分:2)

COM对象位于一个的公寓中。通过跨越公寓边界的接口指针访问COM对象从不一个好主意,除非您适用的方案可以使用免费的线程编组聚合。一个free-threaded marshaller,基本上说这个接口的所有客户端,无论公寓和线程,都在同一个进程中,并依赖于对象本身来维护同步和线程安全。对象本身必须聚合自由线程编组接口,所以希望你是它的作者以及客户端代码。

有关自由线程封送的更多信息可以在msdn.com找到,但是他们的一篇文章涵盖了我一再重复使用的对象this one

我希望它可以帮助你。