普通的COM公寓线程规则适用。如果对象是由客户端在单线程公寓中创建的,则您的客户端线程需要使用一个编组的接口指针,否则会出现RPC_E_WRONG_THREAD错误。实际的方法调用将在服务器上的STA线程中执行,它需要为此泵送消息循环。执行是串行化的,不需要锁定。如果它位于MTA公寓中,则方法调用将在任意的RPC工作线程上执行。您需要采取通常的线程预防措施。
请参阅对象间通信, 代理和存根。 客户端总是在某个进程对象中调用接口方法。如果实际对象是本地或远程的,则调用将被传递到代理对象,然后代理对象将对实际对象进行远程过程调用。那么实际执行哪种方法呢?答案是每当有一个跨进程接口调用时,每个接口方法都由代理对象实现。代理对象始终是一个代表被调用对象的进程内对象。该代理对象知道实际对象正在本地或远程服务器上运行。代理对象将函数参数打包成一些数据包,并生成一个 RPC 调用以调用本地或远程对象。该数据包由服务器进程中的存根对象在本地或远程计算机上拾取,该存根对象解包参数并调用方法的真正实现。当该函数返回时,存根将任何输出参数和返回值打包并将其发送回代理,代理解包它们并将它们返回给原始客户端。因此,客户端和服务器始终像一切都在进程内部一样交谈。