1

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

自从我处理核心 COM 以来已经有一段时间了,所以我不确定如何处理这个问题,或者如果没有一些技巧,这是否可能完全可行。

4

1 回答 1

5

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

否则没有理由不能确保封送的方法调用是线程安全的,只需调用 CoInitializeEx() 来请求 STA。在进程外服务器中的工作与在进程内服务器中一样好。如果您这样做只是为了解决线程问题,那么绝对支持进程内 STA。需要消息循环。

于 2012-08-05T16:32:27.217 回答