进程内的服务器和进程外的服务器

ActiveX 部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交互作用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。例如,假设应用程序使用 ActiveX 控件来提供一个标准的雇员窗体,供公司的多种应用程序使用。提供雇员窗体的 ActiveX 控件就是服务器,使用这个控件的应用程序就是服务器的客户端。

AcitveX 部件可能和客户端的应用程序运行在同一个进程中,也可能运行在不同的进程中,这要取决于该 ActiveX 部件是如何实现的。例如,如果应用程序使用一个部件,该部件是一个 ActiveX-enabled 应用程序的一部分,则它在一个单独的进程中运行。如果该部件已作为动态链接库(.dll 文件)中的一个可编程对象被实现,则它运行在和应用程序同一进程中。

通常,如果 ActiveX 部件作为一个可执行文件(.exe 文件)的一部分被实现,它就是一个进程外的服务端,并且运行在它自己的进程中。如果,它已作为一个动态链接库被实现,则它是一个进程内的服务端,并且和客户端应用程序运行在同一个进程中。通常,使用进程内的服务端的应用程序比使用进程外的服务端的应用程序执行起来要快些,因为应用程序不必跨越进程的边境来使用对象的属性,方法和事件。

下列表示出如何实现不同类型的部件:

部件 服务器类型
ActiveX-enabled 应用程序 进程外的服务器
代码部件 进程内的服务器或者进程外的服务器
ActiveX 控件 进程内的服务器
ActiveX 文档 进程内的服务器或者进程外的服务器

使用进程内的服务器部件,是优化应用程序性能的一种方法。另一种方法是使用事前绑定。详细信息,请参阅本章后面的“加速对象引用”。