Winapi 如何知道两个COM代理是否代理同一个COM对象
我有两个STA线程,它们调用COM服务器,因此我得到两个不同的COM代理指针,指向同一个COM对象。在这种情况下,如果指针比较是不可能的,那么有没有办法检查相等性?让一个线程将其指针封送到另一个线程,然后让另一个线程执行COM标识比较(这意味着,显式查询两个指针的Winapi 如何知道两个COM代理是否代理同一个COM对象,winapi,com,sta,Winapi,Com,Sta,我有两个STA线程,它们调用COM服务器,因此我得到两个不同的COM代理指针,指向同一个COM对象。在这种情况下,如果指针比较是不可能的,那么有没有办法检查相等性?让一个线程将其指针封送到另一个线程,然后让另一个线程执行COM标识比较(这意味着,显式查询两个指针的IUnknown,然后比较结果的IUnknown*指针是否相等)@IgorTandetnik:我可能错了,但我认为这不起作用。为了让两个STA线程首先访问同一个COM对象,该对象必须被封送到至少一个线程,可能是两个线程,封送是一个代理。
IUnknown
,然后比较结果的IUnknown*
指针是否相等)@IgorTandetnik:我可能错了,但我认为这不起作用。为了让两个STA线程首先访问同一个COM对象,该对象必须被封送到至少一个线程,可能是两个线程,封送是一个代理。身份比较将检查代理的IUnknown
指针,而不是u当COM对象在公寓间共享时,考虑将其存储在QueryInterface
。尽管我同意您,更明智的做法可能是重新审视应用程序的设计,以便它不会首先失去对COM对象的跟踪。我支持@IgorTandetnik所说的一切。首先,您需要将引用获取到同一单元中,因为COM指针只能在其包含的单元中使用。一旦它们位于同一单元中,您就可以使用COM标识。