跨单元访问接口

COM 提供了一种方法,让进程中的任何单元都能访问进程中任何其他单元的对象上实现的接口。 这是通过 IGlobalInterfaceTable 接口来实现的。 此接口有三种方法,可用于执行以下操作:

  • 将接口注册为全局(进程范围)接口。
  • 通过 Cookie 从任何其他单元获取指向该接口的指针。
  • 撤销接口的全局注册。

IGlobalInterfaceTable 接口是一种有效的方法,可让进程将接口指针存储在内存位置中,并可从进程内的多个位置进行访问,例如进程范围内的变量和包含指向其他对象的接口指针的敏捷对象(自由线程、封送对象)。

敏捷对象不知道其运行所处的基础 COM 基础设施;换句话说,不知道是在哪个单元、上下文和线程上执行。 该对象可以保留特定于单元或上下文的接口。 因此,无论敏捷组件在哪里执行,调用这些接口都不一定能正常工作。 全局接口表根据敏捷对象的执行位置,保证使用对象的有效代理(或直接指针),从而避免了这个问题。

注意

全局接口表不能跨越进程或计算机边界,因此不能用来替代正常的参数传递机制。

 

有关创建和使用全局接口表的信息,请参阅以下主题:

选择线程模型

多线程单元

进程内服务器线程问题

进程、线程和单元

单线程通信和多线程通信

单线程单元