使用系统提供的代理项
若要为 DLL 服务器使用系统提供的代理项,在注册表中为 DllSurrogate 值指定一个空字符串或 NULL。 当针对这样指定的 DLL 服务器的激活请求到达 COM 时,COM 将同时启动默认代理进程和请求的 DLL(通过在内部启动命令行上指定 CLSID),以避免单独调用。 (有关在代理项进程中运行多个 DLL 服务器的信息,请参阅代理项共享。)
代理进程的默认实现是混合线程模型样式伪 COM 服务器。 当多个 DLL 服务器加载到单个代理项进程中时,此过程可确保使用该服务器的注册表中指定的线程模型实例化每个 DLL 服务器。 所有加载的自由线程服务器都将驻留在多线程单元中,而每个单元线程服务器将驻留在单线程单元中。 如果 DLL 服务器同时支持两种线程模型,COM 将选择多线程。
编写此代理进程是为了使 COM 同时处理 DLL 服务器的卸载和代理进程的终止。 进程生存期主要由代理项中封送处理的对象数通知,这是对进程的外部依赖项的启发式度量。尽管意图是表示外部依赖项,但此生存期模型不会区分进程内封送和进程外封送处理。 请注意避免通过跨单元封送或通过基于进程内封送的机制(如全局接口表或 IAgileReference)无意中固定代理项。
系统提供的代理项适用于大多数开发人员,而且非常易于使用。 但是,有特殊考虑的开发人员可能会认为有必要自定义代理项。 有关详细信息,请参阅编写自定义代理项。