我正在处理一个单线程库(不是线程安全的),我想将其包装在一个COM进程外对象中以绕过它的线程非安全。我需要一种行为,其中每个新COM对象都在其自己的进程中实例化 - 某种形式的进程外单例。
自从我与硬核COM打交道以来已经有一段时间了,所以我不知道如何处理这个问题,或者在没有一些诡计的情况下这是否可行。
答案 0 :(得分:5)
调用CoRegisterClassObject(),并将REGCLS参数设置为REGCLS_SINGLEUSE。谨防成本,流程不是廉价的操作系统对象。
没有理由不能确保封送方法调用是线程安全的,只需调用CoInitializeEx()来请求STA。在进程内服务器中也可以像在进程内服务器中一样工作。如果你只是这样做来解决线程问题,那么肯定有利于进程内STA。需要消息循环。