进程外的COM单例

时间:2012-08-05 15:52:21

标签: c++ com atl out-of-process

我正在处理一个单线程库(不是线程安全的),我想将其包装在一个COM进程外对象中以绕过它的线程非安全。我需要一种行为,其中每个新COM对象都在其自己的进程中实例化 - 某种形式的进程外单例。

自从我与硬核COM打交道以来已经有一段时间了,所以我不知道如何处理这个问题,或者在没有一些诡计的情况下这是否可行。

1 个答案:

答案 0 :(得分:5)

调用CoRegisterClassObject(),并将REGCLS参数设置为REGCLS_SINGLEUSE。谨防成本,流程是廉价的操作系统对象。

没有理由不能确保封送方法调用是线程安全的,只需调用CoInitializeEx()来请求STA。在进程内服务器中也可以像在进程内服务器中一样工作。如果你只是这样做来解决线程问题,那么肯定有利于进程内STA。需要消息循环。