1

我是 VB6 的新手,但我目前负责维护一个可怕的编辑器,比如工具,它有大量的表单、类、模块和 3rd 方工具,它们都像德克萨斯电锯大屠杀中那个人的皮肤一样块在一起。 .

我不明白为什么当我在调试模式下运行应用程序时得到不同的结果,而不是当我编译它并在我的开发电脑上运行它与我将它安装在不同的电脑上时。

是的,我知道我很笨,所以请指导我到哪里可以找到更多关于此的信息。我希望找到一些我现在根本没有得到的不同链接、注册表相关等连接,即像打蜡、打蜡这样的东西:P

脖子上的主要痛苦是当我试图从我的 QA 中调试一些错误时,我需要找到一台备用电脑来测试它,而且我无法直接调试,因为我不知道代码在哪里如果我那样做。

谢谢。

4

2 回答 2

2

我在调试模式下运行应用程序,而不是在我编译它并在我的开发电脑上运行它时

编译时,您可以选择编译为本机代码或 pcode。调试器仅使用 pcode 运行。在极少数情况下,当您编译为本机代码时,行为会发生变化。这种特殊情况真的很少见。我使用 VB6 自从它发布以来,我可能每年得到一两次。我的应用程序是一个复杂的 CAD/CAM 创建形状和运行金属切割机,并且有两打 DLL。不是典型的情况。在家里用我的爱好软件我从来没有遇到过这个问题。

还有另一类错误是由事件排序问题引起的。虽然 VB6 并不是真正的多任务处理,但它能够跳出当前代码块来处理事件。如果它为新事件重新进入相​​同的块,则可能会产生有趣的事情(至少可以说)。我认为这可能是您的问题的根源,因为您的软件是一个高度交互的软件类型的编辑器。

一般来说,问题是通过重新排序受影响的区域来解决的。您可以通过插入 MsgBox 或写入文本文件来记录您所在的位置来找到受影响的区域。我建议记录到文本文件,因为 MsgBox 倾向于改变与时间或多任务相关的行为。

请记住,如果在 VB6 在代码块中间触发事件并且有一个 DoEvents 浮动,那么它将离开代码块处理事件并返回到原始代码块。如果它重新输入相同的代码块,而您并不是故意要发生这种情况,那么您将遇到问题。而且你会在不同的计算机上遇到不同的问题,因为每台计算机的时间都不同。

处理此类问题的最简单方法是创建一些标志变量。在多任务用语中,它们被称为信号量或互斥量。当您输入代码的关键部分时,您将其设置为 true。当您离开例程时,您将其设置为 false。如果当你输入那段代码时它已经是真的,你就不会执行它。

当我将它安装在另一台电脑上时。

这些通常是安装了错误的 DLL 的结果。很可能你有一个旧版本,而目标有一个新版本。我会下载免费的 Virtual PC 并创建一个干净的 Window XP 安装来仔细检查这一点。

如果您的问题是事件计时,这在不同的计算机上也可能不同。这是通过记录(不是 MsgBox)可疑区域来发现的。

如果您可以显示屏幕截图或特定错误的文本,那么我可以提供更好的帮助。

于 2009-02-05T13:34:54.957 回答
0

首先要检查的是您的应用程序所依赖的所有 dll 的版本 - 包括 VB6 dll 的服务包版本。

您是否有任何关于行为不同的更具体细节?

于 2009-02-05T10:12:55.597 回答