3

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

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

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

我尝试使界面使用中性单元,但仍然必须调用 CoMarshalInterface/CoUnmarshalInterface 以避免出现问题。

问候,毛罗。

4

1 回答 1

3

COM 对象仅驻留在一间公寓中。通过跨单元边界的接口指针访问 COM 对象绝不是一个好主意,除非您适用的场景可以利用免费的线程封送聚合。一个自由线程编组器,本质上说这个接口的所有客户端,不管单元和线程,都在同一个进程中,并且将依赖对象本身来保持同步和线程安全。对象本身必须聚合自由线程编组器接口,因此希望您是它的作者以及客户端代码。

可以在 msdn.com 上找到有关自由线程封送处理的更多信息,但他们的一篇文章涵盖了我倾向于一次又一次地重用的对象是这篇文章。

我希望它可以帮助你。

于 2012-10-28T23:44:43.697 回答