Winapi 如何知道两个COM代理是否代理同一个COM对象

Winapi 如何知道两个COM代理是否代理同一个COM对象,winapi,com,sta,Winapi,Com,Sta,我有两个STA线程,它们调用COM服务器,因此我得到两个不同的COM代理指针,指向同一个COM对象。在这种情况下,如果指针比较是不可能的,那么有没有办法检查相等性?让一个线程将其指针封送到另一个线程,然后让另一个线程执行COM标识比较(这意味着,显式查询两个指针的IUnknown,然后比较结果的IUnknown*指针是否相等)@IgorTandetnik:我可能错了,但我认为这不起作用。为了让两个STA线程首先访问同一个COM对象,该对象必须被封送到至少一个线程,可能是两个线程,封送是一个代理。

我有两个STA线程,它们调用COM服务器,因此我得到两个不同的COM代理指针,指向同一个COM对象。在这种情况下,如果指针比较是不可能的,那么有没有办法检查相等性?

让一个线程将其指针封送到另一个线程,然后让另一个线程执行COM标识比较(这意味着,显式查询两个指针的
IUnknown
,然后比较结果的
IUnknown*
指针是否相等)@IgorTandetnik:我可能错了,但我认为这不起作用。为了让两个STA线程首先访问同一个COM对象,该对象必须被封送到至少一个线程,可能是两个线程,封送是一个代理。身份比较将检查代理的
IUnknown
指针,而不是u当COM对象在公寓间共享时,考虑将其存储在 IGLBALLATION FACTABLE E/CODE >中,将令牌传递给每个线程,以便COM对象可以被封送到每个线程,然后比较令牌的相等性,而不是代理性。@ ReMyLeBeaOb/MeScLunt永远不会向S中的同一对象创建两个代理。ame单元。当您将同一对象封送到特定单元两次时,可能通过不同的路由,COM确保最终结果是指向同一代理对象的两个指针;COM标识保持不变。@RemyLebeau STA 2必须封送指向STA 3的指针,并让后者进行比较(反之亦然).以任何其他方式执行比较在物理上是不可能的:这将是非法的(违反COM规则)直接将原始指针从一个单元传递到另一个单元,并让后者调用
QueryInterface
。尽管我同意您,更明智的做法可能是重新审视应用程序的设计,以便它不会首先失去对COM对象的跟踪。我支持@IgorTandetnik所说的一切。首先,您需要将引用获取到同一单元中,因为COM指针只能在其包含的单元中使用。一旦它们位于同一单元中,您就可以使用COM标识。