本主题说明在进程内部件提供的对象的存活期内有哪些关键事件,其中包括单击“结束”按钮强行卸载 DLL 时发生的情况。
注意 创建一个 ActiveX DLL 示例需要分为几步,这个帮助主题只是其中一步。要访问该帮助主题,选择帮助主题“创建 ActiveX DLL”即可。
要运行 TestThing 测试应用程序,请按照以下步骤执行:
注意 根据缺省,在(由“工具”菜单所访问的)“选项”对话框的“通用”选项卡上“请求时编译”选项是被选中的。在复选了“请求时编译”选项并调试部件时可能会发现,在输入运行模式之前用 CTRL+F5 (或“运行”菜单上的“启动全编译”)来编译组中的所有工程,这将很有益处。编译错误通常要求重置工程,这意味着返回到设计模式。
在 Command1_Click 事件过程创建测试 Thing 对象时,发生了两件事。首先,在创建对象之前,执行了 Sub Main 中的代码。只有在执行了 Sub Main 以后才创建 Thing 对象。
注意,Name 属性现在还没有值。
重点 当 ActiveX 部件接受到第一个请求其提供的对象的时候,它要执行其 Sub Main 过程,这在部件创建对象之前。Sub Main 过程应该尽可能地简短,因为 Sub Main 的执行时间过长可能导致创建对象的请求超时。请参阅“部件设计的一般准则”的“启动和结束部件”。
在“立即”窗口中,可以看到从新的 Thing 的 Initialize 事件发来的一条调试消息,因为 New 操作导致创建一个对象。紧接着的消息是从原来的 Thing 发来的 Terminate 消息,它就是开始命名为 First Thing 的那个 Thing 。
当把对新 Thing 对象的引用放在变量 mthTest
中时,原来的 Thing 对象就被破坏了。此时再没有变量包含对原来的 Thing 的引用了,因此必须破坏它。
在程序关闭之前,在“立即”窗口中显示出命名为 Second Thing 的 Thing 对象的 Terminate 消息。
在关闭程序时,Visual Basic 将清除所有仍然包含对象引用的变量。由于每个变量都被设成 Nothing 了,因此它引用的对象也就被破坏了。
“结束”按钮或者代码中遇到的 End 语句导致程序突然结束时,Visual Basic 将回收程序正在使用的所有内存和资源。但是这种清除就象程序遇到了致命的错误一样。对象将不会收到 Terminate 事件。
要观察 End 按钮的作用,请按照以下步骤执行:
重点 要记住,如果用“结束”按钮或者通过代码中的 End 语句来结束程序,程序将立即中止,不会执行任何对象的 Terminate 事件。一般来说,通过卸载所有窗体来关闭程序是更好的方式。
详细信息 《Visual Basic 程序员指南》的“用对象编程”介绍了对象存活期的有关规则。
创建 ActiveX DLL 示例需要好几步,该帮助主题只是其中一步。
目的 | 请参阅 |
到下一步 | 循环引用和对象的存活期 |
从头开始 | 创建一个 ActiveX DLL |