我在调试模式下运行应用程序,而不是在我编译它并在我的开发电脑上运行它时
编译时,您可以选择编译为本机代码或 pcode。调试器仅使用 pcode 运行。在极少数情况下,当您编译为本机代码时,行为会发生变化。这种特殊情况真的很少见。我使用 VB6 自从它发布以来,我可能每年得到一两次。我的应用程序是一个复杂的 CAD/CAM 创建形状和运行金属切割机,并且有两打 DLL。不是典型的情况。在家里用我的爱好软件我从来没有遇到过这个问题。
还有另一类错误是由事件排序问题引起的。虽然 VB6 并不是真正的多任务处理,但它能够跳出当前代码块来处理事件。如果它为新事件重新进入相同的块,则可能会产生有趣的事情(至少可以说)。我认为这可能是您的问题的根源,因为您的软件是一个高度交互的软件类型的编辑器。
一般来说,问题是通过重新排序受影响的区域来解决的。您可以通过插入 MsgBox 或写入文本文件来记录您所在的位置来找到受影响的区域。我建议记录到文本文件,因为 MsgBox 倾向于改变与时间或多任务相关的行为。
请记住,如果在 VB6 在代码块中间触发事件并且有一个 DoEvents 浮动,那么它将离开代码块处理事件并返回到原始代码块。如果它重新输入相同的代码块,而您并不是故意要发生这种情况,那么您将遇到问题。而且你会在不同的计算机上遇到不同的问题,因为每台计算机的时间都不同。
处理此类问题的最简单方法是创建一些标志变量。在多任务用语中,它们被称为信号量或互斥量。当您输入代码的关键部分时,您将其设置为 true。当您离开例程时,您将其设置为 false。如果当你输入那段代码时它已经是真的,你就不会执行它。
当我将它安装在另一台电脑上时。
这些通常是安装了错误的 DLL 的结果。很可能你有一个旧版本,而目标有一个新版本。我会下载免费的 Virtual PC 并创建一个干净的 Window XP 安装来仔细检查这一点。
如果您的问题是事件计时,这在不同的计算机上也可能不同。这是通过记录(不是 MsgBox)可疑区域来发现的。
如果您可以显示屏幕截图或特定错误的文本,那么我可以提供更好的帮助。