结束vb6程序的正确方法是执行以下操作:
Dim frm As Form
For Each frm In Forms
Unload frm
Next frm
end
它处理表单,什么负责内存中的模块?
答案 0 :(得分:4)
无需在VB6中显式卸载模块。卸载最后一个表单时会自动卸载它们。该语言根本不支持对标准模块的引用,仅支持对其中定义的(全局)函数和变量的引用。由于您无法引用该模块,因此无法卸载它们。
答案 1 :(得分:3)
不要使用End
,你不需要(永远)。然后所有内存都可以正常释放。
即使使用End
,也应自动释放内存。有传言称某些类实例被忘记并且不会被正确终止,尽管引用计数。因此,最佳做法是将所有对象实例明确地设置为Nothing
(特别是,但不限于在模块中分配的实例)。我从来没有看到任何确认这是真的(虽然可能仍然如此!)。
答案 2 :(得分:2)
如果用“module”表示静态.BAS模块(它们都是模块:Forms,Classes,UserControls等),你不需要“卸载”它们,因为它们是 static
大多数其他模块类型都是动态加载的。对于Forms,通常通过预先声明的全局引用变量,其名称和类型与Form类相同(是的,Form是一种类)。
答案 3 :(得分:1)
请注意,如果您使用全局变量,那么您应该检查是否需要清除它们中的任何一个。如果是这样,你应该有一个模块的CleanUp方法,并在主窗体的卸载事件期间调用它。另一个问题有时是你卸载东西的顺序很重要。通过明确清理,您可以控制它。
在VB6中,你应该很少使用END。如果你有任何循环引用,那么程序将作为一个过程来咀嚼资源,当你再次启动它时会导致各种奇怪的错误。使用COM对象很容易在无意中设置一个循环链接的对象链。
End作为以前版本的QuickBASIC和Visual BASIC的兼容性保留而存在。在VB 4.X引入了创建类的能力之前,它没有开始引起重大问题。它开始在5.X中获得关注。
在此之前,在VB 3.X中实现这一目标的唯一方法之一是让两个表单相互设置引用。
答案 4 :(得分:0)
退出时卸载所有模块的方法解决了使用API调用ExitProcess()
检索退出代码的有趣错误