【发布时间】:2011-10-10 16:08:21
【问题描述】:
我有一个多线程 C++Builder GUI 应用程序,它通过 COM 与第三方应用程序通信。
我需要从多个线程调用 COM 对象的方法,并且我正在使用互斥体保护访问。显然,主 GUI 线程必须使用 STA 模型,但我的工作线程需要使用 MTA。 COM 对象是在 MTA 线程中构造的。
由于 MTA/STA 不匹配,一切正常除了从 GUI 线程访问 COM 对象。
我读过一些关于编组的文章,但没有尝试实现它,因为我看到的示例似乎需要不同的访问语义,具体取决于当前的公寓模型,我真的很想有这样的代码(来自程序员的 POV)不关心当前的公寓模型。
那么,是否有一种惯用的方式来编写在“相同”对象上运行但可以从 STA 和 MTA 线程调用的 COM 代码?
【问题讨论】:
-
封送接口指针是必需的,你不能跳过它。 IGlobalInterfaceTable 让它变得简单。
-
@Hans,是的,但是如果我说得对,有些线程需要编组指针,而其他线程需要未编组的指针?我正在寻找一种方法来统一它或根据当前线程单元模型动态切换哪个接口指针......?
-
好吧,只是总是编组指针。如果不需要转换公寓,您只需拿回原件即可。
-
@Hans,如果您将答案放在 cmets 中,Roddy 应该如何接受? :-) 这个问题被列为未回答。
标签: com c++builder atl