运行 TestThing 测试应用程序

本主题说明在进程内部件提供的对象的存活期内有哪些关键事件,其中包括单击“结束”按钮强行卸载 DLL 时发生的情况。

注意 创建一个 ActiveX DLL 示例需要分为几步,这个帮助主题只是其中一步。要访问该帮助主题,选择帮助主题“创建 ActiveX DLL”即可。

要运行 TestThing 测试应用程序,请按照以下步骤执行:

  1. 按 CTRL+F5 键运行工程组。注意在“立即”窗口中没有显示任何消息。

注意 根据缺省,在(由“工具”菜单所访问的)“选项”对话框的“通用”选项卡上“请求时编译”选项是被选中的。在复选了“请求时编译”选项并调试部件时可能会发现,在输入运行模式之前用 CTRL+F5 (或“运行”菜单上的“启动全编译”)来编译组中的所有工程,这将很有益处。编译错误通常要求重置工程,这意味着返回到设计模式。

  1. 在“Thing Demo”对话框上,单击“Create New Thing”。在向“InputBox”输入 Thing 的名称之前,可以看到“立即”窗口中出现两条调试消息:

    在 Command1_Click 事件过程创建测试 Thing 对象时,发生了两件事。首先,在创建对象之前,执行了 Sub Main 中的代码。只有在执行了 Sub Main 以后才创建 Thing 对象。

    注意,Name 属性现在还没有值。

    重点 ActiveX 部件接受到第一个请求其提供的对象的时候,它要执行其 Sub Main 过程,这在部件创建对象之前。Sub Main 过程应该尽可能地简短,因为 Sub Main 的执行时间过长可能导致创建对象的请求超时。请参阅“部件设计的一般准则”的“启动和结束部件”。

  2. 在“InputBox”中输入“First Thing”然后单击“确定”。Command1_Click 事件过程将此值赋予 Thing 对象的 Name 属性。

  3. 单击“Show the Thing”显示 Thing 对象的属性。注意 Name 属性现在有值了。单击“确定”关闭消息框。

  4. 单击“Reverse the Thing’s Name”调用 Thing 对象的 ReverseName 方法。从这个方法返回之后,“Show the Thing”(Command2)会得到一个单击事件,因为它的 Value 属性被设为 True,同时 Command2_Click() 中的 MsgBox 语句将显示修改后的属性值。单击“确定”关闭消息框。

  5. 再次单击“Create New Thing”,破坏已有的 Thing 对象并创建一个新的。

    在“立即”窗口中,可以看到从新的 Thing 的 Initialize 事件发来的一条调试消息,因为 New 操作导致创建一个对象。紧接着的消息是从原来的 Thing 发来的 Terminate 消息,它就是开始命名为 First Thing 的那个 Thing 。

    当把对新 Thing 对象的引用放在变量 mthTest 中时,原来的 Thing 对象就被破坏了。此时再没有变量包含对原来的 Thing 的引用了,因此必须破坏它。

  6. 在“InputBox”中输入“Second Thing”,然后单击“确定”。

  7. 单击 “Thing Demo”上的“关闭”框返回到设计模式。不要使用 Visual Basic 工具栏上的“结束”按钮。

    在程序关闭之前,在“立即”窗口中显示出命名为 Second Thing 的 Thing 对象的 Terminate 消息。

    在关闭程序时,Visual Basic 将清除所有仍然包含对象引用的变量。由于每个变量都被设成 Nothing 了,因此它引用的对象也就被破坏了。

结束”按钮或者代码中遇到的 End 语句导致程序突然结束时,Visual Basic 将回收程序正在使用的所有内存和资源。但是这种清除就象程序遇到了致命的错误一样。对象将不会收到 Terminate 事件。

要观察 End 按钮的作用,请按照以下步骤执行:

  1. 再次运行程序。创建新的 Thing 并任意命名它。

  2. 这次,用工具栏上的“结束”按钮结束程序。在“立即”窗口中将会显示出窗体的 Thing 对象的 Terminate 消息。

    重点 要记住,如果用“结束”按钮或者通过代码中的 End 语句来结束程序,程序将立即中止,不会执行任何对象的 Terminate 事件。一般来说,通过卸载所有窗体来关闭程序是更好的方式。

详细信息 《Visual Basic 程序员指南》的“用对象编程”介绍了对象存活期的有关规则。

循序渐进

创建 ActiveX DLL 示例需要好几步,该帮助主题只是其中一步。

目的 请参阅
到下一步 循环引用和对象的存活期
从头开始 创建一个 ActiveX DLL