ActXDoc (ActXDoc.vbp)

ActXDoc 是一个基于 ActiveX 文档的应用程序。它利用两个 ActiveX 文档（FirstDoc.vbd 和 SecndDoc.vbd）来合并 ActiveX 文档的若干特性，例如：在两个文档之间传递数据，使用 HyperLink 对象等。请参阅《部件工具指南》中“创建 ActiveX 部件”部分的第五章“创建 ActiveX 文档”。

文件	描述
FrmAbout.frx	frmAbout.frm 的二进制数据。
FrmAbout.frm	ActiveX 文档的“关于”框。
FrmAux.frm	在 FirstDoc ActiveX 文档中显示的辅助窗体。
mGlobal.bas	包含全局常数的代码模块。
Actxdoc.vbp	应用程序的工程文件。
FirstDoc.dob	FirstDoc ActiveX 文档的 UserDocument 对象。
Secnddoc.dob	SecndDoc ActiveX 文档的 UserDocument 对象。
运行

从 Visual Basic 的“文件”菜单中单击“打开工程”，从 Visual Basic 主目录中的 \Samples\CompTool\ActXDoc 子目录中选择 ActXDoc.Vbp 文件。然后按 F5 键即可运行该应用程序。

运行 Internet Explorer 3.0（或更高版本），单击“地址”，并键入 FirstDoc.vbd 文件的路径。该文件在 Visual Basic 的根目录下。例如，如果将 Visual Basic 安装在缺省的目录中，路径将是：c:\Program Files\MSDevStudio\VB\FirstDoc.vbd。


ATM (ATM.vbp)

ATM.vbp 示例应用程序用来演示资源文件的用法。该应用程序的屏幕图案为一台自动取款机 (ATM)，该自动取款机能够为顾客提供几种语言的银行事务，例如英语、法语、德语等。

背景

ATM.vbp 示例首先提示顾客指定一种语言用于交易。然后，它可以根据顾客的不同选择，从 ATM.res 资源文件中装载不同的资源组。详细信息，请参阅《程序员指南》的第四章“工程的管理”。

文件	描述
Atm.bas	该模块中包含示例中的过程。
Atm.rc	资源的源文件，其中包含所有的本地化字符串和对 ICO、WAV 文件的引用。这些信息将被连编到 ATM.RES 中。
Atm.res	资源文件，其中包含了文本、图标和声音 (.WAV) 数据。它是用资源编译器对 ATM.RC 文件进行编译后得到的结果。
ATM.vbp	该示例的工程文件。
ATM32.res	用于 32 位系统的资源文件。
FrmAmoun.frm	用于将其它货币转换为美元的窗体。
FrmInput.frm	用于键入客户信息的窗体。
Openbank.frm	用于选择语言的窗体。
Openbank.frx	OPENBANK.FRM 的二进制数据。
运行

从 Visual Basic 的“文件”菜单中，选择“打开工程”，然后从 Visual Basic 主目录下的 \Samples\Pguide\ATM 子目录中选择 ATM.vbp 文件。按 F5 键或从“运行”菜单中选择“启动”即可运行该示例应用程序。


Biblio (Biblio.vbp)

可以使用该示例应用程序来浏览 Visual Basic 目录 (\VB) 下的 Biblio.mdb 数据库。它演示了 Data 控件的使用。详细信息，请参阅《程序员指南》中“用 Data 控件访问数据库”一章。

文件	描述
Biblio.bas	该模块中包含 Public Sub 和 Function 过程。
Biblio.frm	示例应用程序的主窗体。
Biblio.hlp	示例的帮助文件。
Biblio.vbp	示例的工程文件。
Frmabout.frm	“关于”框的窗体。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\Biblio 子目录中选定 Biblio.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


Blanker (Blanker.vbp)

该示例应用程序演示了一些图形技术，这些技术是在《程序员指南》的“创建应用程序图形”一中介绍的。该示例中使用的控件包括 Image、Line、PictureBox、Shape 和 Timer。

背景

该示例演示了几种 Visual Basic 图形方法，其中包括：Circle、Line、Move 和 Pset。

文件	描述
Blanker.frm	示例的主窗体。
Blanker.frx	Blanker.frm 文件的的二进制数据。
Blanker.vbp	示例的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Blanker 子目录中选定 Blanker.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


BookSale (Booksale.vbg)

在该示例工程中，使用一个自动化服务器将业务处理的有关政策和规则逻辑封装起来，为外部的一个 User Interface 部件提供了黑箱服务。客户端工程是一个清楚直观的用户界面，用户可以通过它来选择控制选项并查看处理之后的结果。客户端工程主要关心用户的工作方式，以及用户如何使用应用程序的结果，但是它对于应用程序的业务和操作规则一无所知。服务器部件专门用来将业务与数据访问规则封装起来，以“服务”的形式提供给客户部件，客户部件可以通过这些服务得到他们所需的信息。服务器不需要了解用户选项如何选择，以及结果是以何种形式反馈给用户的。由于服务器不需要知道与用户有关的信息，它的功能可以设计为通用的。这样，该部件就更有希望能够在其它的应用程序中被重用。服务器还使用了类模块，使业务和数据访问规则的逻辑成为结构化的，这种方式将有助于开发、调试、可读性、可维护性和源代码的可复用性。

该部件可以作为客户部件运行在同一台计算机上（在工程开发和调试阶段，这是很有帮助的）。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力，以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对部件进行任何重新编译或者修改，位置无关性是自动支持的。

在该工程中，服务器仅仅为了演示才使用了一个可见的窗体。服务器本身并不需要任何形式的用户界面，不过，通过用户界面反映出来的状态信息将有助于调试和运行时的监控。（如果需要状态监控，另一种方法是由服务器提供状态方法，并由单独的监控程序来对服务器的状态进行查询。）

文件	描述
Book_cli.vbp	客户端部件工程文件。
Book_cli.frm	客户端主窗体。
Book_cli.frx	客户端主对话框图形文件。
Frmchart.frm	客户端结果图表窗体。
Frmcogs.frm	客户端货物费用窗体。
Book_cli.bas	客户端主/全局实用程序模块。
Book_svr.vbp	服务器部件工程文件。
Book_svr.frm	服务器状态指示窗体。
Book_svr.frx	服务器状态指示图形文件。
Book_svr.bas	服务器主/全局实用程序模块。
Sales.cls	服务器主/公共类模块。
Model.cls	服务器私人业务模块规则类模块。
Taxes.cls	服务器私人税务规则类模块。
Booksale.mdb	示例 Jet 数据库文件。
Booksale.ldb	在运行时由 Jet 创建的示例数据库文件。
Booksale.txt	文本文件，其中包含了该示例应用程序的概况。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\Booksale 子目录中选定 Book_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Book_cli.vbp，用户界面部件使用了 Book_svr.vbp 中定义的类模块。

注意   该部件可以作为用户界面部件运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对部件进行任何重新编译或者修改，位置无关性是自动支持的。


CallDlls (CallDlls.vbp)

该示例应用程序演示如何调用动态链接库 (DLLs) 中的过程。详细信息，请参阅《程序员指南》的“DLL 中调用过程”一节。

文件	描述
Calldlls.frm	应用程序的主窗体。
Calldlls.frx	Calldlls.frm 文件的二进制数据。
Calldlls.vbp	应用程序的工程文件。
Declares.bas	该模块中声明了示例中使用的 DLL。
Frmmenus.frm	用于显示系统信息的窗体。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\ CompTool\CallDlls 子目录中选定 Calldlls.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


Coffee (Coffee2.vbp, CoffWat2.vbp, MTCoffee.vbp, XTimers.vbp)

Coffee 中包含以下几个部分：一个客户端 CoffWat2，两个 ActiveX 部件（OLE 服务器）Coffee2 与 MTCoffee。这三个工程共同演示了以下特性：

•	使用事件 (Coffee2) 的异步通知。

•	使用回调方法 (Coffee2) 的异步通知。

•	多线程 (MTCoffee)。

XTimers.vbp 是一个辅助工程，为 Coffee2 和 MTCoffee 提供了纯代码的定时器。

该示例可以视为“创建 ActiveX 部件”的第三章“创建 ActiveX Exe 部件”循序渐进教程的延伸。关于异步通知与多线程的详细说明，请参阅第八章“连编代码部件”。

文件	描述
CoffWat2.vbp	CoffeeWatch 客户端工程。
CWMod1.bas	工程代码
CWForm1.frm	客户端的主窗体。
ICoffNot.cls	用于回调方法的 Icoffee通知的接口。
CWNotMe.cls	NotifyMe 对象提供 ICoffeeNotify 接口, 使她能够接收回调。
CWThread.frm	客户端用来演示多线程的窗体。
CWCofTrk.cls	CoffeeTracker 对象用于等待来自多线程 Coffee 对象的结束事件 。
AboutCof.txt	一个文档备份，演示在工程中存储相关文档的能力。
Coffee2.vbp	Coffee2 部件工程。
Co2Cmon.cls	CoffeeMonitor 类，用来演示使用事件的异步通知。
Co2Conn.cls	Connector 类，用来允许多个客户端共享同一个 CoffeeMonitor 对象。
Co2CMon2.cls	CoffeeMonitor2 类，用来演示使用回调方法的异步通知。
Co2Conn2.cls	Connector2 类，用来允许多个客户端共享同一个 CoffeeMonitor2 对象。
Co2Mod1.bas	用来保存对共享的 CoffeeMonitor 和 CoffeeMonitor2 对象的引用。
MTCoffee.vbp	MTCoffee 部件工程。
MTCoffee.cls	多线程的 Coffee 对象。
MTCMod1.bas	用于演示全局数据的实例化的标准模块。
XTimers.vbp	回调定时器工程.
XTimer.cls	XTimer 工程.
XTimerS.bas	XTimer.的支持模块。
运行

尽管该实例中的代码不多，但要运行它还是十分复杂的。因为它演示的是进程外部件。为了进行调试，进程外部件必须运行在单独的 Visual Basic 中。

另外，在开发环境中，示例所演示的特性（多线程和纯代码的定时器）要么是不可演示的，要么是有危险的。

1.0 将 XTimers.vbp 加载到 Visual Basic 中。在“文件”菜单中，选择“生成 XTimers.dll”，将工程编译成为一个 .dll 文件。

这时，千万不要在开发环境下运行 Xtimers。XTimers 使用了 Windows API 来实现一个纯代码的定时器对象，所以必须对它进行编译。

1.0 将 MTCoffee 加载到 Visual Basic 中。在“工程”菜单，选择“引用”打开“引用”对话框。选择“Xtimers”，然后单击“确定”，将一个引用设置为编译后的 DLL。

1.da“文件”菜单，选择“生成 MTCoffee.exe”将工程生成一个.exe 文件。

1.cb行 MTCoffee。因为开发环境不支持执行的多线程，因此需要将工程生成为可执行的。如果在 Visual Basic 中运行 MTCoffee，将不显示多线程行为。

1.0 将 Coffee2.vbp 加载到 Visual Basic 中。选择“工程”菜单中的“引用”，打开“引用”对话框。选定“Xtimers”，然后单击“确定”，将一个引用设置为编译后的 DLL。

2.0 按 CRTL+F5 键，运行 Coffee2 工程。

在运行进程外部件工程的时候要使用 CRTL+F5 键，而不是 F5 键，这样才能够确认在部件为客户端提供对象之前能够捕获所有的编译错误。（请参阅联机手册中的“创建 ActiveX Exe 部件”

1.f4动 Visual Basic 的另一个实例，加载 CoffWat2.vbp。选择“工程”菜单中的“引用”，打开“引用”对话框。在对话框中选择Coffee2 (确保可以使用 Coffee2.vbp) 和 MTCoffee (确保可以使用 MTCoffee.exe),，然后单击“确定”，将引用设置为部件。

2.0 按 F5 键运行工程。

在运行示例应用程序时，请注意观察 MTCoffee 在为每个 Coffee 对象分配一个线程时的特点，可以发现，在将线程方式改为循环线程缓冲池之后，最好重新编译 MTCoffee。（在“工程属性”框的“通用”选项卡的“不参加执行”框中可以找到该选项。）在使用循环线程缓冲池时，可以观察到阻塞现象，因为同一线程上的对象共享全局数据。

也可以编译 Coffee2.exe 和 CoffWat2.exe，然后运行多个客户程序，从而观察到异步通知对象 CoffeeMonitor 和 CoffeeMonitor2 的共享。在多个客户时，循环线程缓冲池将引起阻塞，而且不同客户端使用的对象共享数据。

要彻底理解该示例应用程序的来龙去脉，请参阅联机手册中“创建 ActiveX 部件”的“连编代码部件”。


Control Plus (CtlPlus.vbp)

CtlPlus 演示了使用 Visual Basic 制作的 ActiveX 控件的若干特性。

该示例应用程序是从“创建 ActiveX 部件”第四章“创建 ActiveX 控件”循序渐进教程工程发展而来的。关于创建控件的其它信息，请参阅“创建 ActiveX 部件”中的第九章“连编 ActiveX 控件”。

文件	描述
CtlPlus.vbg	程序组。
CtlPlus.vbp	控件部件工程。
CPShapeL.ctl	ShapeLabel 控件。
CPSLGen.pag	ShapeLabel 的 General 属性页选项卡。
TestCtlP	测试程序。
TCPForm1.frm	用来显示 ShapeLabel 的测试窗体。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\ActvComp\CtlPlus 子目录中选定 CtlPlus.vbg 文件。

在 TestCtlP 中打开 Form1，查看 ShapeLabel 的设计时特性。

按 CTRL+F5 键或者从“运行”菜单中选择“全编译执行”，以运行程序组并观察控件的运行时特性。


控件 (Controls.vbp)

该示例应用程序演示了若干 Visual Basic 控件的用法，如 TextBox、CommandButton、Image 等。该示例中以图表说明了许多标准属性的用法。

背景

该示例由几个窗体组成，每个窗体中有一个或者几个控件。该示例中演示的控件包括：TextBox、Hscrollbar、ListBox、PictureBox、OptionButton、CommandButton 以及 Label 控件。详细信息，请参阅《程序员指南》中“创建和使用控件”一节。

文件	描述
Button.frm	该窗体演示了 CommandButton 控件的用法。
Button.frx	Button.frm 文件的二进制数据文件。
Check.frm	该窗体演示了 CheckButton 控件的用法。
Controls.vbp	示例应用程序的工程文件。
Images.frm	该窗体演示了 Image 和 Shape 控件的用法。
Images.frx	Image.frm 文件的二进制数据文件。
Main.frm	示例应用程序的主窗体。
Multi.frm	该窗体演示了 ListBox 控件的用法。
Options.frm	该窗体演示了 OptionButton 和 Frame 控件的用法。
Text.frm	该窗体演示了 TextBox 控件的用法。
Text.frx	Text.frm 文件的二进制数据文件。
Wordwrap.frm	该窗体演示了 Label 控件的用法。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\Controls 子目录中选定 Controls.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


DataTree (Datatree.vbp)

DataTree 示例应用程序演示如何使用 TreeView 控件和 ListView 控件来查看一个小型数据库的目录 (Biblio.mdb)。其中还使用了 ProgressBar 控件，从而为用户提供了直观的工作进展指示。

文件	描述
TreeView.frx	TreeView.frm 的的二进制数据。
TreeView.frx	该窗体中包含 TreeView、ListView 以及 Progressbar 控件。
Datatree.vbp	示例应用程序的主工程。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\DataTree 子目录中选定 DataTree.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


错误 (Errors.vbp)

该示例应用程序演示了各种 Visual Basic 错误处理技术，其中包括内联和集中的错误处理。

背景

该示例包含一个单独的窗体，使用该窗体中的一组命令按钮即可调用错误处理过程，另外还有一个 basic 模块，其中包含了集中式的错误处理程序。如果逐步跟踪这些过程中的代码，将能够看到不同的错误处理方法的效果。详细信息，请参阅《程序员指南》第十三章“调式代码并处理错误”。

文件	描述
Errors.bas	该模块中包含集中的错误处理代码。
Errors.frm	该窗体演示了错误处理技术。
Errors.vbp	示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Errors 子目录中选定 Errors.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


FileCtls (FileCtls.vbp)

使用该示例应用程序可以在目录中查找特定的文件，或者有特定扩展名的文件。该示例中使用了 File ListBox、Drive ListBox 以及 Directory ListBox 等控件。

文件	描述
Seek.frm	示例的主窗体。
Winseek.vbp	示例的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Misc\FileCts 子目录中选定 Winseek.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


FirstApp (FirstApp.vbp)

该示例应用程序演示了 Data Control 与其它数据察觉控件（data aware controls）的用法。它简单地演示了如何在运行时对属性进行赋值。

背景

该示例由一个窗体组成，窗体中的 DBGrid 控件被连接到一个 Data 控件。详细信息，请参阅《程序员指南》第二章“在 Visual Basic 中开发应用程序”。

文件	描述
Form1.frx	Form1.frm 的二进制文件。
Form1.frm
Firstapp.vbp	应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Firstapp 子目录中选定 Firstapp.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


GeoFacts (GeoFacts.vbp)

GeoFacts 示例应用程序演示了如何使用其它应用程序提供的对象。在该示例中，对象是通过 GetObject 函数由 Microsoft Excel 提供的。利用函数返回的引用，可以使用 Excel 电子数据表中的数据动态填充两个 ComboBox 控件和一个 ListBox 控件。

文件	描述
World.xls	为应用程序提供数据的 Excel 电子数据表。
Geofacts.frm	应用程序的窗体。
Geofacts.bas	该代码模块中包含应用程序的过程。
Geofacts.vbp	应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\GeoFacts 子目录中选定 GeoFacts.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


ListCmbo (ListCmbo.vbp)

该示例应用程序演示了标准 ListBox 与 ComboBox 控件的数据绑定。

背景

Visual Basic 5.0 允许将标准的 ListBox 和 ComboBox 控件绑定到一个 Data 控件上。与其它的绑定控件不同的是，ListBox 和 ComboBox 控件要求在进行绑定之前首先移居控件的列表部分，从而使控件能够正确地显示出当前记录的值。

当绑定到 ComboBox 和 ListBox 控件上时，Data 控件从控件内的可用项列表中选择当前记录的值。例如，如果将 ListBox 控件绑定到数据库中包含州名缩写的字段中，Data 控件将搜索列表框中的值，并选择匹配的项。因此，在绑定控件之前，必须将所有可能的州名缩写移居到控件中。如果列表框未被移居，Data 控件将不能找到匹配的项，也就不会选定任何项。

该示例应用程序演示了这种特点，并说明如何在绑定之前对 ListBox 和 ComboBox 控件进行移居。它使用了一个简单的窗体来显示 Biblio.mdb 中的 Publishers 表。Publishers 中有一个“state”字段，其中包含当前的出版商地址的州名缩写。在运行时，示例对 Publishers 表进行查询，找出“state”字段中的所有不重复的值，并将其移居到 ListBox 和 ComboBox 控件中。然后，控件被绑定到 Data 控件上。

当用户使用 Data 控件上的定位按钮查看 Publishers 记录时，在 ListBox 和 ComboBox 控件中将选中当前记录的“state”字段的值。用户只需单击适当的选项按钮即可选择要查看的控件。

文件	描述
Frmpub.frm	主 Publishers 窗体，用来显示 Publishers 记录。
Frmpub.frx	Publishers 窗体的二进制部分。
Frmabout.frm	标准的 About 窗体。
Frmabout.frx	About 窗体的二进制部分。
Listcmbo.vbp	示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\Liscmbo 子目录中选定 ListCmbo.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

要浏览记录，可以单击 Data 控件上的定位按钮。要查看 ListBox 或 ComboBox 控件，可以单击适当的选项按钮。


MDI (MDINote.vbp)

该示例应用程序演示了一个多文档界面 (MDI) 的笔记本应用程序。它还介绍了与菜单创建有关的知识。

背景

该示例中包含一个父窗体，一个子窗体，一个模式对话框窗体，以及两个 basic 模块。将该示例应用程序与 SDINote 结合起来看将有助于理解界面风格之间的差异。详细信息，请参阅《程序员指南》第六章“创建用户界面”。

文件	描述
Filopen.bas	该模块中包含公共的文件处理代码。
Find.frm	模式对话框窗体。
Mdi.frm	MDI 父窗体。
Mdi.frx	Mdi.frm 文件的二进制数据文件。
Mdinote.bas	该模块中包含共享的代码。
MDINote.vbp	MDInote 工程文件。
Notepad.frm	MDI 子窗体。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\MDI 子目录中选定 Mdinote.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


MSFlexGd (MSFlexGd.vbp)

MSFlexGd 示例应用程序演示了 MSFlexGrid 控件。

文件	描述
Flex.frx	Flex.frm 文件的二进制信息。
Flex.frm	主窗体，用来显示控件。
Flex.vbp	应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\MsFlexGd 子目录中选定 MSFlexGd.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

要浏览记录，可以单击 Data 控件上的定位按钮。要查看 ListBox 或 ComboBox 控件，可以单击适当的选项按钮。


OleCont (OleCont.vbp)

该示例应用程序演示了 OLE Container 控件的能力。在该示例中可以利用 SaveToFile 与 ReadFromFile 方法保存或者打开 OLE 对象。详细信息，请参阅《程序员指南》“使用 OLE 容器控件”一节。

文件	描述
Contchld.frm.	MDI 子窗体，其中包含 OLE Container 控件。
Contmdi.frm	主窗体。
Olecont.bas	该模块中包含 Public Sub 和 Function 过程。
Colecont.vbp	该示例的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\PGuide\Olecont 子目录中选定 Olecont.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


优化 (Optimize.vbp)

该示例应用程序演示了几种 Visual Basic 优化技术。通过对各种编码技术的速度进行对比，可以看出它们在性能上的差异。

背景

该示例中包含了几个窗体，每个都分别演示了优化的与非优化的代码。在运行该示例应用程序时，最好将其它正在运行的应用程序全部关闭，从而获得更加精确的运行时间。详细信息，请参阅《程序员指南》第十五章“性能和兼容性设计”。

文件	描述
About.frm	应用程序的“关于”框窗体。
About.frx	ABOUT.FRM 文件的二进制数据文件。
Algorith.frm	该窗体演示了不同的绘制算法。
Code.frm	该窗体演示了代码的优化。
Collection.frm	该窗体演示了集合的优化。
Explore.frm	示例应用程序的主窗体，具有资源管理器的界面风格。
Explore.frx	EXPLORE.FRM 文件的二进制数据文件。
Frmimage.frm	用于演示 Splash Screen 的辅助窗体。
Frmimage.frx	FRMIMAGE.FRM 文件的二进制数据文件。
FrmPics.frm	该窗体演示了图象显示时的优化。
FrmPics.frx	FRMPICS.FRM 文件的二进制数据文件。
FrmShow1.frm	该窗体演示了窗体的优化。
FrmShow2.frm	演示窗体优化时用到的辅助窗体。
Global.bas	该模块中包含共享的代码。
Graphics.frm	该窗体演示了图形方法的优化。
Graphics.frx	GRAPHICS.FRM 文件的二进制数据文件。
Numbers.frm	该窗体演示了数据类型的优化。
Optimize.vbp	该应用程序的工程文件。
Paintpic.frm	该窗体演示了绘制的优化。
Paintpic.frx	二进制数据文件 PAINTPIC.FRM 文件。
Splash.frm	示例的快速显示。
Splash.frx	二进制数据文件 SPLASH.FRM 文件。
Splshdmo.frm	该窗体演示了启动时的优化。
Strings.frm	该窗体演示了字符串处理的优化。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Optimize 子目录中选定 Optimize.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


PalMode (Palettes.vbp)

该示例应用程序演示了不同的 PaletteMode 设置对 256 色图象的影响。该示例还初步介绍了 Picture 对象。

背景

该示例包括一个单独显示图象用的窗体。为了看到 PaletteMode 属性的不同效果，运行该示例应用程序的计算机显示器应设置为 256 色模式。详细信息，请参阅《程序员指南》第十二章“使用文本和图形”。

文件	描述
Banner.gif	GIF 图象文件。
Clouds.bmp	Bitmap 图象文件。
Forest.jpg	JPG 图象文件。
Palettes.frm	应用程序的主窗体。
Palettes.frx	Palettes.frm 文件的二进制数据文件。
Palettes.vbp	调色板工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Palmode 子目录中选定 Palettes.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


PicClip (RedTop.vbp)

该示例应用程序演示了 PictureClip 控件的用法之一。该示例应用程序使用 PictureClip 控件来旋转一个陀螺。

文件	描述
Infoform.frm	信息窗体。
Infoform.frx	信息窗体的二进制部分。
Redtop.frm	主窗体。
Redtop.frx	主窗体的二进制部分。
Redtop.vbp	示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\PicClip 子目录中选定 Redtop.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


用对象编程 (ProgWOb.vbp)

ProgWOb.vbp 对 Visual Basic《程序员指南》第九章“用对象编程”中若干概念进行了演示，其中包括：创建集合类、事件、Implements 语句、多态以及 Friend 过程。

文件	描述
ProgWOb.vbp	工程。
PWOMain.frm	主窗体，通过此窗体来选择要演示的内容。
PWOFrien.frm	第一个示例：使用 Friend 过程在对象之间传递用户自定义的类型。
PWOTestC.cls	定义用于演示 Friend 过程的 TestClass 对象。
PWOFrien.bas	定义在 TestClass 对象之间传递的数据类型。
PWOCYOCC.frm	第二个演示：利用此窗体可运行“创建自己的集合类”的三个代码例子。
PWOEmpl.cls	三个例子中用到的 Employee 类。
PWOStraw.frm	House of Straw 例子：使用了一个共有的 Collection 对象。
PWOSBus1.cls	SmallBusiness1 类，用于 House of Straw 示例。
PWOStick.frm	House of Sticks 示例：使用一个私有的 Collection 对象。
PWOSBus2.cls	SmallBusiness2 类，用于 House of Sticks 示例。
PWOBrick.frm	House of Bricks 示例：创建自己的集合类。
PWOEmpls.cls	Employees 集合类，用于 House of Bricks 示例中。可以同“每一个”一起使用。
PWOSBus3.cls	SmallBusiness3 类，用于 House of Bricks 示例。
PWOEvent.frm	第三个示例，显示两种情况：(1) 一个执行长任务的对象能够利用事件向通知调用者它的进展情况；(2) 事件能够被广播到多个接受者。
PWOWidg	在长的任务进行之中，Widget 对象使用事件向它的调用者报告进展情况。
PWOEvRec.frm	接收者窗体处理一个事件，并显示如果事件的 ByRef 参数被接收者修改将会怎样。
PWOImple	第四个演示：显示多态是如何允许前期与多个对象类进行绑定，此外还说明了性能如何。
PWOIShap	定义由演示程序中其它所有类实现的 IShape 接口。
PWOPoly	对于绘制多边形来说，Polygon 是一个非常原始的对象。实现 IShape 用于绘制。
PWORect	矩形对象实现用于绘制的 IShape。它还实现了 Polygon 接口，并使用了一个内部的 Polygon 对象来存储它的数据。
PWOTrngl	Triangle 对象实现 IShape 与 Polygon。将 IShape 与大部分的 Polygon 功能委托给一个内部的 Polygon 对象。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\ProgWOb 子目录中选定 ProgWOb.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


Sdi (SdiNote.vbp)

该示例演示了一个单文档界面 (SDI) 的笔记本应用程序。它还初步介绍了菜单与工具栏的创建。

背景

该示例由以下几部分组成：主窗体，模式的对话框窗体，以及两个基模块。将该示例应用程序与 MDINote 示例应用程序结合起来将有助于理解界面风格之间的差异。详细信息，请参阅《程序员指南》第六章“创建用户界面”。

文件	描述
Filopen.bas	该模块中包含共同的文件处理代码。
Find.frm	模式的对话框窗体。
FrmSDI.frm	笔记本的主窗体。
Frmsdi.frx	Frmsdi.frm 文件的二进制数据文件。
SDInote.bas	该模块中包含共享的代码。
SDINote.vbp	SDINote 工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\SDI 子目录中选定 Sdinote.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


TabOrder (TabOrder.vbp)

TabOrder 示例应用程序的作用是重新设置给定窗体的选项卡顺序，它使用了 VB5 可扩展性模型以及传统的 VB 技术。在 VB 中创建窗体的时候，经常会发现控件的选项卡顺序是不固定的。可以使用 TabOrder 应用程序来重新设置选项卡的顺序，使之成为自顶向下或者从左往右的。还可以将 TabOrder 的列表中的项进行上下移动，并使改变在窗体中反映出来。请参阅《部件工具指南》的“使用外接程序扩展 Visual Basic 环境”中的第三章“如何构造外接程序”。

文件	描述
Tab.bmp	TabOrder 应用程序的点位图。
Tab.ico	TabOrder 应用程序的图标。
TabOrder.rc	TabOrder 应用程序的资源文件。
TaOrder.cls	TabOrder 应用程序的类文件。
TabOrder.frx	TabOrder.frm 文件的的二进制数据。
Taborder.frm	应用程序的主窗体。
Taborder.bas	应用程序的代码模块。
Taborder.vbp	应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\AddIns\Taborder 子目录中选定 Taborder.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


UnBndGrd (UnBndGrd.vbp)

UnBound DBGrid 示例应用程序是一个简单程序，它说明如何在非绑定模式 (DataMode = 1) 下使用 DBGrid 控件。

背景

在大部分的情况下，DBGrid 控件能够被绑定到 Data 控件。但是也有一些情况需要在非绑定模式下使用 DBGrid，例如 Data 控件不支持的专用数据库格式或者特别简单的数据集。该示例应用程序使用一组 UnBound 事件来显示储存在数组中的数据。

文件	描述
UnBndGrd.frm	主窗体，包含 DBGrid 控件。
UnBndGrd.frx	UnBndGrd.frm 文件的二进制部分。
UnBndGrd.vbp	示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Misc\UnBndGrd 子目录中选定 UnBndGrd.VBP 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


VBMail (VBMail.vbp)

该示例应用程序以收发电子邮件的形式演示了 MAPI 控件的用法。它使用了消息应用程序编程界面 (MAPI) 控件：MAPI 消息与 MAPI 会话。

注意   要运行该示例，需要一个 MAPI 标准的消息交换系统。如果运行在 Windows 95 上，那么需要使用 Microsoft Exchange。

背景

MAPI 会话控件建立一个 MAPI 会话，以及从 MAPI 发出的信号。在建立了消息会话之后，MAPI 消息控件可以用来执行各种消息系统函数。这些函数包括访问、下载以及发送消息，显示详情与地址本对话框，访问数据附件，在寻址时识别收件人的名称，对消息进行组合、复信、全部复信、转发、删除等操作。

文件	描述
Maillst.frm	用于显示信件列表的窗体。
Mailst.frx	包含示例的二进制数据。
Mailoptf.frm	用于设置选项的窗体。
Mailsup.bas	本示例的支持过程模块。
MsgView.frm	在本窗体中显示被查看的消息。
Newmsg.frm	本窗体用于创建新的消息。
Vbmail.frm	主窗体。
Vbmail.vbp	该示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\VBTerm 子目录中选定 VBMAIL.VBP 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


VBTerm (VBTerm.vbp)

VBTerm 是一个使用 MSComm 控件的终端仿真程序。该示例应用程序演示了如何通过串行口使用 MSComm 控件。

背景

MSComm 控件具有以下功能：打开一个串行口，改变其设置，通过该端口发送与接收数据，以及监控和设置不同的数据线。它支持两种访问方法进行通讯：轮询与事件驱动。

文件	描述
Cansend.frm	在文件传输期间使用的对话框。
Termset.frm	用来改变串行口设置的窗体。
Termset.frx	TERMSET.FRM 的二进制部分。
Vbterm.frm	主窗体。
Vbterm.frx	VBTERM.FRM 的二进制部分。
Vbterm.glo	公共声明。
Vbterm.vbp	示例应用程序的工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CompTool\VBterm 子目录中选定 VBTerm.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


VCR (Vcr.vbp)

该示例应用程序演示如何模仿真实的对象（如 VCR）来生成 Visual Basic 类。

背景

该示例应用程序的主窗体表示一台录象机，两个支持类分别表示磁带传输和录音机对象。详细信息，请参阅《程序员指南》第五章“程序设计基础”。

文件	描述
Recorder.cls	录音机对象的类模块。
Set.frm	用来设置录音机属性的模式窗体。
Tape.cls	磁带传输对象的类模块。
Vcr.bas	包含共享代码的模块。
Vcr.frm	应用程序的主窗体。
Vcr.frx	VCR.frm 文件的二进制数据文件。
Vcr.vbp	VCR 工程文件。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Pguide\Vcr 子目录中选定 Vcr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。


VisData (Visdata.vbp)

该示例程序演示的各种程序设计技术通过数据访问对象（DAO）层来访问数据，DAO 层是 Visual Basic 专业版中内置的功能。

注意   要使用该示例应用程序访问 ODBC 数据源，首先必须使用 Visual Basic 专业版提供的 ODBC 设置程序安装 ODBC。

VisData 类似于一个通用的数据库实用工具，它具有下列功能：

创建数据库与表。

•	表的修改（添加、删除字段与索引）。

•	利用三种记录集类型（表、dynaset、快照）和三种窗体类型（单个记录、数据控件和数据网格）进行数据浏览与修改。

•	所有对象的属性浏览。

•	该窗体演示了新的数据绑定列表与数据绑定组合框控件。

•	所有被支持的数据类型的输入与输出。

•	直接的 SQL 语句执行，支持 SQL 支持的所有函数，如 Insert、Update、Delete、Drop、Create、Dump 等等。

•	AdHoc Query 生成器，帮助不熟悉 SQL 的用户使用 Where 子句、Joins、Order By、Group By 表达式创建复杂的查询，但是输出被限制为选定的列。

•	事务处理。

•	将表的结构以及数据复制到相同或者不同的数据库中。

•	支持 Jet MDB、Dbase III 和 IV、FoxPro 2.x、Paradox 3.x 和 4.x、Btrieve、Text、Excel 以及 SQL Server，DDL 和 DML。

•	QueryDef 的创建、修改和执行。

•	JET 安全性的创建与修改。

•	关系/参照完整性的创建与修改。

•	附加表的管理。

•	用作 Visual Basic 的外接程序（请参阅 VISDATA.TXT）。

代码中包含了注解，以帮助理解在数据访问层中使用的各种方法。本应用程序中的代码和窗体只需少许改动即可在其它的应用程序中使用。

文件	描述
Aboutbox.frm	应用程序的标准“关于”框。
Addfield.frm	该窗体用来在表中添加字段。
Addindex.frm	该窗体用来在表中添加索引。
Attach.frm	附加的表的列表。
Cpystru.frm	该窗体用来复制表的结构。
Database.frm	该窗体用来选择一个数据库。
Dataform.frm	Data 控件窗体。
Datagrid.frm	该窗体用来显示数据绑定网格控件中的数据。
Datatype.frm	用于输入/输出实用程序的数据类型选择。
Dbpwd.frm	用来输入密码的窗体。
Dcprop.frm	Data 控件属性窗体。
Dfd.frm	Data Form Designer 外接程序窗体。
Dynasnap.frm	该窗体用来显示单记录模式下的数据。
Errors.frm	错误集合窗体。
Expname.frm	提示输出名称。
Find.frm	该窗体用来在 Dynaset 中查找记录。
Grpsusrs.frm	Jet 安全性窗体。
Imptbls.frm	输入表列表。
Join.frm	该窗体用来将联结添加到 Query Builder 中。
Loginfrm.frm	Jet WorkSpace 登录对话框。
Newattch.frm	新附件窗体。
Newpw.frm	新密码对话框。
Newug.frm	新用户/组对话框。
Odbclogn.frm	ODBC 登录窗体。
Property.frm	属性浏览器。
Query.frm	该窗体用来编译查询。
Replace.frm	该窗体用来对表进行全局替换操作。
Seek.frm	该窗体用来为 Seek 函数获得输入。
Sql.frm	该窗体用来键入并执行 SQL 语句。
Tableobj.frm	该窗体用来显示 Table 对象中的数据。
Tblstru.frm	该窗体用来显示与修改表的结构。
Vbimex.frm	输入/输出窗体。
Vdclass.cls	VisData 的类模块。
Vdmdi.frm	应用程序的主 MDI 窗体。
Visdata.bas	应用程序的支持函数。
Visdata.vbp	应用程序的工程文件。
Zoom.frm	该窗体用来放大显示字符数据。
Vb5.hlp	VisData 帮助文件。
*.frx 文件	包含有关 .frm 文件的二进制数据。
*.ico 文件	用户可对此进行修改。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\Visdata 子目录中选定 Visdata.vbp 文件。

如果希望打开一个本地的数据库，那么只需要选择数据库的类型即可显示出“打开文件”对话框，其中的文件类型已经被设置为所需的数据文件类型。

如果在“打开数据库”子菜单中选择了 ODBC，那么看到的将是“打开数据库”窗体。如果尚未键入任何的服务器，那么此时将需要键入网络上现有的一个 SQL 服务器的名称。如果已经知道了用户 ID 和密码，可以将它们一并加入。数据库的名称是任选的。在输入了这些数据之后，选择“确定”，这样就能够登录到服务器上了。在上述步骤中可能会遇到另外的对话框。尽量回答它们提出的问题，实在没有办法的话，可以请求 SQL 管理员予以帮助。

在打开了数据库之后，双击表的名字即可按照选定的表格类型与记录集类型打开表。如果使用 Query Builder 创建的 dynaset，一次可以从一个或者多个表中选择数据。

表类型的记录集总是可更新的。dynaset 类型的记录集在大部分的情况下是可更新的，但是下述情况除外：ODBC 没有唯一性的索引，特定的多表联结，以及其它的 SQL Select 语句，如 count(*)、max() 等。快照类型的记录集是不可更新的。


回调示例应用程序（Clbk_Svr.vbp 和 Clbk_Cli.vbp），企业版

该示例演示了传递到外部（或远程）ActiveX 服务器部件的 ActiveX 对象指针的用法。服务器可以定期地对该对象指针调用某个方法。这在效果上相当于由服务器初始化回调到客户端，这种应用程序模型比对客户端进行轮询要好得多，因为在后一模型中应用程序不得不去了解服务器的工作状态。在示例中仅仅将时间返回到客户端，如果需要的话，它可以同样容易地返回数据、新闻，以及客户端需要了解的其它信息。由此得到的好处在于：服务器只需要查看客户需要什么样的数据，而客户可以进行其它工作，只有在服务器有了使它感兴趣的信息时，客户端才会被中断。

在该工程中，服务器仅仅为了演示才使用了一个可见的窗体。服务器本身并不需要任何形式的用户界面，不过，通过用户界面反映出来的状态信息将有助于调试和运行时的监控。（注意，如果需要状态监控，另一种方法是由服务器提供状态方法，并由单独的监控应用程序来对服务器的状态进行查询。）

文件	描述
Clbk_cli.vbp	客户端部件工程文件。
Clbk_cli.frm	客户端主窗体。
Clbk_cli.bas	客户端主/全局实用工具模块。
Clbk_cli.cls	客户端的类模块。
Clbk_svr.vbp	服务器部件的工程文件。
Clbk_svr.frm	服务器的状态指示窗体。
Clbk_svr.bas	服务器主/全局实用模块。
Clbk_svr.cls	服务器的类模块。
Callback.txt	该文本文件中包含工程的概述与有关描述。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CliSrv\Callback 子目录中选定 Clbk_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Cblk_cli.vbp，客户端使用了 Clbk _svr.vbp 中定义的类模块。

注意    自动化服务器可以作为客户端运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对自动化服务器进行任何重新编译或者更改，位置无关性是自动支持的。


Hello World 远程自动化示例应用程序（Helo_Svr.vbp 和 Helo_Cli.vbp），企业版

Hello World 示例仅有六行，它演示了远程自动化与 DCOM 的一种最简单的情况。该应用程序无需重新编译即可运行在一台计算机上，或者运行在两台分布配置的计算机上。

在该工程中，服务器仅仅为了演示才使用了一个可见的窗体。服务器本身并不需要任何形式的用户界面，不过，通过用户界面反映出来的状态信息将有助于调试和运行时的监控。（注意，如果需要状态监控，另一种方法是由服务器提供状态方法，并由单独的监控程序来对服务器的状态进行查询。）

文件	描述
Helo_cli.vbp	客户端部件工程文件。
Helo_cli.frm	客户端主窗体。
Helo_svr.vbp	服务器部件工程文件。
Helo_svr.frm	服务器状态指示窗体。
Helo_svr.cls	服务器的类模块。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CliSrv\Hello 子目录中选定 Helo_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Helo_cli.vbp，客户端使用了 Helo_svr.vbp 中定义的类模块。

注意   自动化服务器可以作为客户端运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对自动化服务器进行任何重新编译或者更改，位置无关性是自动支持的。


界面示例应用程序（Intr_Svr.vbp 和 Intr_Cli.vbp），企业版

在需要为特定的客户端保留整个工程的上下文时，该示例应用程序提供了一种方法，更加有效地使用 COM 的“套间模式”资源分配算法。

本工程中的服务器没有窗体模块，因此在运行它的机器上是不可见的。（当客户端具有对它的活动引用时，可以在运行任务列表中看到它。）

文件	描述
Intr_cli.vbp	客户端部件工程文件。
Intr_cli.frm	客户端主窗体。
Intr_svr.bas	服务器主/全局实用模块。
Intr_svr.cls	该模块为一个共有的接口类模块，客户端用它来访问该部件的私有类。
Getdate.cls	一个私有类，返回当前的日期。
Gettime.cls	一个私有类，返回当前的时间。
Intrface.txt	该文本文件中包含工程的概述与有关描述。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CliSrv\Intrface 子目录中选定 Intr_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Intr_cli.vbp，客户端使用了 Intr_svr.vbp 中定义的类模块。

注意   自动化服务器可以作为客户端运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对自动化服务器进行任何重新编译或者更改，位置无关性是自动支持的。


浏览服务器（Passthrough Sever）示例应用程序（Pass_Svr.vbp 和 Pass_Cli.vbp），企业版

该示例应用程序是一个简单的浏览服务器（pass-through server）。它的一个方法叫做 RunServer，它以需要启动的服务器的 ProgID 为参数。ProgID 指定的服务器与浏览服务器运行在相同的计算机上。如果 ProgID 指定的服务器是一个进程内服务器，那么它与浏览服务器运行在相同的进程空间中。

RunServer 返回被启动的服务器的句柄，因此客户端能够直接与所请求的服务器进行交谈。因为浏览服务器是一个单用户的服务器，每个使用它的客户端将得到自己的浏览服务器实例，以及自己的进程空间和执行线程。

利用浏览服务器，客户端应用程序能够创建自己的、独立的远程服务器执行环境，并且能够根据需要在该环境中启动或停止进程内服务器。因为进程内服务器能够非常迅速地启动，而且它运行在浏览服务器的进程空间中，同仅仅使用进程外服务器相比，这种执行模型的效率更高。

在该工程中，服务器仅仅为了演示才使用了一个可见的窗体。服务器本身并不需要任何形式的用户界面，不过，通过用户界面反映出来的状态信息将有助于调试和运行时的监控。（提供状态监控的另一种方法是由服务器提供状态方法，并由单独的监控程序来对服务器的状态进行查询。）

文件	描述
Pass_cli.vbp	客户端部件工程文件。
Pass_cli.frm	客户端主窗体。
Pass_svr.vbp	服务器部件工程文件。
Pass_svr.frm	服务器状态指示窗体。
Pass_svr.bas	服务器主/全局实用模块。
Pass_svr.cls	服务器类模块。
Passthru.txt	该文本文件中包含工程的概述以及有关说明。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CliSrv\Passthru 子目录中选定 Pass_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Pass_cli.vbp，客户端使用了 Pass_svr.vbp 中定义的类模块。

注意   自动化服务器可以作为客户端运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对自动化服务器进行任何重新编译或者更改，位置无关性是自动支持的。


缓冲池管理示例应用程序（Pmgr_Svr.vp 与 Pmgr_Cli.vbp），企业版

该示例是一个简单的缓冲池管理程序，可以利用它为客户端应用程序维护打开的自动化服务器实例。在这种方案中，如果客户端应用程序需要使用某个对象，它们需要向缓冲池管理程序请求一个指针。缓冲池管理程序将检查缓冲池，并决定是否准许请求。这种方法具有以下优点：

•	它避免了每个客户端请求带来的大量自动化服务器创建费用。因为缓冲池通常是在客户端需要服务器之前就创建完毕的。

•	根据客户端请求的频率、潜在的客户端的个数以及服务器任务所需的时间，创建的缓冲池的大小比一对一的客户-服务器分配方案通常要小得多（而且缓冲池的大小是可以随时进行调整的）。例如，如果客户端的个数为 60，请求的平均频率为每个客户端每分钟请求一次，每个服务器任务的平均长度为 1 秒钟。纯线性的分配方案将建议只需一个服务器即可满足 60 个客户端的需要。实际上，请求不会是理想化的均匀分布，存在一定的冗余度是合情合理的，如果缓冲池的大小为 5 个自动化服务器，那么在通常情况下是能够满足 60 个客户端的需求的。

•	它限制特定类型的服务器不得超出规定的个数，该阈值是由服务器管理员确定的。这是一种非常有用的性能调节参数，它还可以防止服务器被请求高峰的低优先级服务器滥用。

在该工程中，服务器仅仅为了演示才使用了一个可见的窗体。服务器本身并不需要任何形式的用户界面，不过，通过用户界面反映出来的状态信息将有助于调试和运行时的监控。（提供状态监控的另一种方法是由服务器提供状态方法，并由单独的监控程序来对服务器的状态进行查询。）

文件	描述
Pmgr_cli.vbp	客户端部件工程文件。
Pmgr_cli.frm	客户端主窗体。
Pmgr_svr.vbp	服务器部件工程文件。
Pmgr_svr.frm	服务器状态指示窗体。
Pmgr_svr.bas	服务器主/全局实用模块。
Pmgr_svr.cls	服务器类模块。
Poolmngr.txt	该文本文件中包含工程的概述以及有关说明。
运行

从 Visual Basic 的“文件”菜单中选择“打开工程”，然后从 Visual Basic 的 \Samples\CliSrv\Poolmgr 子目录中选定 Pmgr_svr.vbp 文件。按 F5 键或选择“运行”菜单中的“启动”即可运行该应用程序。

运行后，该工程临时将它的类注册到系统的注册表中。然后可以启动 Visual Basic 的第二个实例以运行 Pmgr_cli.vbp，客户端使用了 Pmgr_svr.vbp 中定义的类模块。

注意   自动化服务器可以作为客户端运行在同一台计算机上。它也可以在远程计算机上运行，从而得到分布式处理带来的强大处理能力以及共享的网络服务器带来的多用户访问特性。对于上述这两种情况，不需要对自动化服务器进行任何重新编译或者更改，位置无关性是自动支持的。


应用程序性能资源管理器 (APE) 示例应用程序包，企业版

该示例应用程序包演示了 Visual Basic 5.0 中 COM 和分布式应用程序的若干特性。它还模仿分布式应用程序的性能特点。关于该示例应用程序中的所有部件的详细信息，请参阅《客户/服务器应用程序创建指南》。

AEClient

文件	描述
modClnt.bas	客户端主/全局实用模块
clsPooTl.cls	客户端类，用于缓冲池式测试。
clsQueTl.cls	客户端类，用于测试队列式的测试
clsCalbk.cls	客户端类，用于回调通知
clsCntSv.cls	客户端类，用于服务请求回调信息
clsDrtTl.cls	客户端类，用于直接的实例化测试
Client.cls	客户端类
frmClnt.frm	客户端主窗体
frmClnt.frx	客户端主窗体的二进制信息
client.ico	客户端窗体图标
AEClient.rc	字符串资源源文件
AEClient.res	字符串资源文件
AEClient.vbp	客户端部件工程文件
AEExpdtr

文件	描述
modExpdt.bas	Expeditor主/全局实用模块
SyncRtrn.cls	Expeditor 通知类，用于客户端事件源
CallBkRf.cls	Expeditor 结果信息类
Expeditr.cls	主 expeditor 接口类
frmExpdt.frm	Expeditor 主窗体
frmexpdt.frx	Expeditor 主窗体的二进制信息
expetitr.ico	Expeditor 主窗体图标
AEExpdtr.rc	字符串资源源文件
AEExpdtr.res	字符串资源文件
AEExpdtr.vbp	Expeditor 部件工程文件
AEInstnr

文件	描述
modInstr.bas	进程 instancer 主/全局实用模块
Instncer.cls	进程 instancer 主类
AEInstnr.vbp	进程 instancer 部件工程文件
AELogger

文件	描述
modLoggr.bas	Logger主/全局实用模块
Logger.cls	Logger 主类
frmLoggr.frm	Logger 主窗体
frmloggr.frx	Logger 主窗体的二进制信息
logger.ico	Logger 主窗体图标
AELogger.rc	字符串资源源文件
AELogger.res	字符串资源文件
AELogger.vbp	字符串部件工程文件
AEPool

文件	描述
modPool.bas	缓冲池管理程序主/全局实用程序模块
PoolMgr.cls	缓冲池管理程序主类
Pool.cls	缓冲池管理程序客户端接口类
frmPool.frm	缓冲池管理程序主窗体
frmpool.frx	缓冲池管理程序主窗体的二进制信息
pool.ico	缓冲池管理程序主窗体图标
AEPool.rc	字符串资源源文件
AEPool.res	字符串资源文件
AEPool.vbp	缓冲池管理程序部件工程文件
AEQueue

文件	描述
modQueue.bas	队列管理程序主/全局实用模块
Queue.cls	队列客户端接口类
clsQueDl.cls	队列处理（handoff）/轮询类
clsServc.cls	队列服务请求类
QueueMgr.cls	队列管理程序主类
frmQueue.frm	队列管理程序主窗体
frmQueue.frx	队列管理程序主窗体的二进制信息
qmanager.ico	队列管理程序主窗体图标
AEQueue.rc	字符串资源源文件
AEQueue.res	字符串资源文件
AEQueue.vbp	队列管理程序部件工程文件
AEServic

文件	描述
modServc.bas	服务主/全局实用模块
Service.cls	服务类的实现
AEServic.mdb	服务的样例数据文件
AEServic.rc	字符串资源源文件
AEServic.res	字符串资源文件
AEServic.vbp	服务部件工程文件
AEWorker

文件	描述
modWorkr.bas	Worker主/全局实用模块
Worker.cls	Worker 类的实现
AEWorker.rc	字符串资源源文件
AEWorker.res	字符串资源文件
AEWorker.vbp	Worker 部件工程文件
AEWrkPvd

文件	描述
basWrkPd.bas	Worker 提供者主/全局实用程序模块
clsWrkPd.cls	Worker 提供者类，用于远程计算机上的 worker 线程
AEWrkPvd.rc	字符串资源源文件
AEWrkPvd.res	字符串资源文件
AEWrkPvd.vbp	Worker 提供者部件工程文件
AEIntrfc

文件	描述
AEIntrfc.ODL	COM 接口规范，用于 Worker 可扩展性接口
包含文件

文件	描述
modAECon.bas	全局的 APE 常数
modWinEr.bas	全局的 Win32 错误常数
modVBErr.bas	全局的 VB 错误常数
modAEGlb.bas	全局的 APE 实用工具模块
clsWkMac.cls	Worker 远程计算机信息类
clsPosFm.cls	窗体位置/持久性类
clsWorkr.cls	Worker 实例信息类
Server

文件	描述
AEExpdtr.cmp	Expeditor 兼容服务器的实现
AEInstnr.cmp	进程 instancer 兼容服务器的实现
AELogger.cmp	Logger 兼容服务器的实现
AEClient.cmp	客户端兼容服务器的实现
AEPool.cmp	缓冲池管理程序兼容服务器的实现
AEQueue.cmp	队列管理程序兼容服务器的实现
AEServic.cmp	服务兼容服务器的实现
AEWorker.cmp	Worker 兼容服务器的实现
AEWrkPvd.cmp	Worker 提供者兼容服务器的实现
注意   APE 可以整个地在一台计算机上运行，也可以借助于远程自动化或者 DCOM 将部件分布到远程的计算机上，从而赢得分布式处理的巨大能力以及对多用户访问的支持。不必为此对 APE 进行更变，它是完全可配置的。