部件以对象方式提供可重用代码。通过创建对象并调用其属性和方法来使用部件的代码的应用程序,被称作客户。
相对于使用部件对象的客户端而言,部件可以运行于进程内或进程外。进程外部件或 ActiveX EXE,在自己的地址空间中运行。而客户通常是运行在其它进程中的应用程序。
图3.1 客户端和进程外部件
进程外部件运行在自己的进程中,这意味着客户端可以通知部件做某事,然后当部件工作时客户端可以继续它自己的工作。当这样的系统正确建立后,部件能在任务结束时使用异步通知来通知客户端,这在“建立代码部件”的“异步的回调与事件”中解释。
注意 “部件设计的一般原理”中的“进程内和进程外代码部件”讨论了进程内和进程外代码部件的区别。
本章将通过构造一个叫做 CoffeeWatch 的简单部件来逐步解释进程外部件的创建和使用。CoffeeWatch 演示了模式的和无模式对话框的行为,并演示了一种用事件来实现异步通知的方法。
通过在 Visual Basic 开发环境的两个不同的实例中运行部件和测试工程,会看到如何在进程外调试 ActiveX E XE。
创建 Coffee 部件的过程互相依赖。因此执行过程的顺序非常重要:
![]() |
创建 Coffee 工程
打开新的 ActiveX EXE 工程,设置必要的工程信息,并且添加演示模式和无模式窗体所需的模块。 |
![]() |
显示 CoffeeMonitor 类的窗体
添加显式模式或无模式窗体的代码。 |
![]() |
创建 CoffeeWatch 测试工程
说明如何在开发环境的第二个实例中创建测试工程。往测试工程中添加代码来调用 CoffeeMonitor 方法。 |
![]() |
模式和无模式窗体在进程外如何运转
说明了当它们与客户的主窗体不在同一个进程中时,模式窗体和无模式窗体显示是不同的。 |
![]() |
提供异步通知事件
说明如何建立向一个或多个客户提供异步通知的对象。 |
![]() |
接收异步通知事件
往客户中添加代码来请求异步通知,并当通知事件发生时采取某些行动的代码。 |
![]() |
共享 CoffeeMonitor
创建 Connector 对象,客户可以用它来获取对于单个共享的 CoffeeMonitor 实例的引用。 |
![]() |
使用共享的 CoffeeMonitor
往客户中添加代码来申请 Connector 对象,然后调用 CoffeeMonitor 的属性来获得对共享的 CoffeeMonitor 对象的引用。 |
![]() |
创建并测试可执行的 Coffee
编译 Coffee 部件和 CoffeeWatch 测试程序。用一个 Coffee.exe 实例来运行 CoffeeWatch 工程和几个 CoffeeWatch.exe 实例。 |
![]() |
总结 ActiveX EXE 部件的创建
概述进程外部件的设计和创建一般过程。 |
如果按下述方式设置了开发环境,这些过程就会变得更容易了。
要准备工作,请按照以下步骤执行:
选中“编辑器”选项卡,并确认“要求变量声明”被选中。这样很容易捕捉键盘输入错误。
选中“环境”选项卡。确认“提示保存改变”被选中,然后单击“确定”。这样当您离开时,很容易保存对工程所做的变更。
![]() |
Coffee2.vbp, CoffWat2.vbp, MTCoffee.vbp.
Coffee2.vbp 和 CoffWat2.vbp 包含本章的扩展的源代码。除了使用事件的异步通知外,它们还包括在辅助接口上使用回调方法的替换版本,以及可用来替代计时器控件的全代码 Timer 示例。MTCoffee 说明了多线程的某些特征。示例应用程序列在Samples 目录中。 |