2

我正在用 VB6 编写一个项目。我正在使用 Win7-32​​ 位并且项目有问题,这个项目是多年前写的,现在我正在重新编译它。当我发出 Make xxx.exe 命令时,VB6 开始编译并冻结并创建超过 10,000 个 *.tmp 文件,几分钟后它关闭 IDE 并且没有任何结果。我的错误在哪里?

4

5 回答 5

4

对我在编译大型可执行项目时遇到 VB6 冻结问题有效的方法是将 VB 应用程序的 CPU 内核限制为只有一个内核(即 VB6 进程的关联掩码设置为 1)。

请注意,这仅在 VB6 进程以关联掩码设置为 1 的情况下才对我有效,而不仅仅是在 VB 进程启动后强制执行关联掩码(在任务管理器中)。要在关联掩码设置为 1 的情况下启动 VB6,请使用以下快捷方式(分别适用于 64 位和 32 位操作系统)并以管理权限启动它:

C:\Windows\System32\cmd.exe /C start "VisualBasic6" /D "C:\Program Files (x86)\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files (x86)\Microsoft Visual Studio \VB98\VB6.EXE"

C:\Windows\System32\cmd.exe /C start "VisualBasic6" /D "C:\Program Files\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE "

如果这不起作用,请尝试使用上述方法在 VB6 IDE 之外创建您的项目。例如,假设您需要在路径 C:\MyProjects\TestProj 中构建一个名为 testproj.vbp 的项目,请在提升的命令提示符中使用以下命令(分别适用于 64 位和 32 位操作系统):

开始 "VisualBasic6" /D "C:\Program Files (x86)\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE" /make "C: \MyProjects\TestProj\testproj.vbp" /outdir "C:\MyProjects\TestProj"

开始 "VisualBasic6" /D "C:\Program Files\Microsoft Visual Studio\VB98" /AFFINITY 1 "C:\Program Files\Microsoft Visual Studio\VB98\VB6.EXE" /make "C:\MyProjects\TestProj\testproj .vbp" /outdir "C:\MyProjects\TestProj"

不幸的是,VB6 并没有给出编译完成的指示,所以您需要在任务管理器中跟踪 VB6 进程(当编译完成时,VB6 进程将终止)。

仅供参考,我在带有 2 个 Intel Xeon 四核 CPU 的 Windows Server 2012 上运行 VB。

于 2015-06-15T12:24:07.790 回答
2

我(令人惊讶地)以前遇到过类似的问题。

最好的解决方案是开始更改您的项目设置。

右键单击您的项目并转到属性。在“编译”选项卡下,转到高级优化。关闭“假定无别名”可能是您最好的选择。但是,如果该按钮被禁用,请尝试从 P-Code 切换到 Native Code。

如果上述更改不起作用,并且您尚未使用 P-Code,请尝试 P-Code。

最后,如果您真的想坚持使用 Native Code,请尝试选择 No Optimization。

如果事情似乎仍然不起作用,只需通过设置并取消选中不同的优化。

如果您在所有这些之后仍然遇到问题,请尝试打开项目中的每个表单和其他文件,并查看特定文件是否只是损坏,这可能导致突然退出。至少通过这种方式,您可以将其跟踪到文件。

如果这一切都失败了,请尝试在不同的操作系统上编译它——但我真的怀疑它会达到那个程度。

祝你好运!

于 2013-09-11T16:01:52.467 回答
2

我尝试了每个 PhoeniX_2 建议。他们都没有工作。我不知道是什么让我尝试这个,但我上次编译时,我创建了一个新的 exe 文件名,而不是我以前版本中使用的文件名。谢天谢地,它奏效了。我不明白为什么。这不是权限问题或锁定文件问题。我认为这可能是因为新的编译覆盖了以前编译的 exe 文件。在 2 天的故障排除期间,计算机还重新启动了几次。

因此,如果 Phoenix 的建议都不适合您,那么请尝试编译一个新的 exe 文件名,而不是使用您之前的编译创建的文件名。

于 2014-11-19T22:38:22.570 回答
0

我已经找到了我们的原因。我们有用户控件在 Initialize 事件期间尝试连接到数据库。这是一个非常糟糕的主意,因为此事件在编译期间以及 IDE 加载期间运行。它挂了很长时间试图连接到不存在的数据库,然后使编译过程崩溃,因此没有生成 Exe(尽管没有可见的迹象)。

解决方案是在从表单 Load 事件调用的公共方法中执行 db 连接和其他启动代码。似乎没有任何可靠的方法来使用 Initialise。

于 2015-04-29T10:51:38.693 回答
0

就个人而言,我在 Windows XP 及更高版本中遇到了 VB6 IDE 的各种问题。

我保留了一个运行 Windows 2000 的虚拟机,并在其中进行任何 VB6 工作。

我几乎没有问题。如果有任何奇怪之处,我只需将 VM 恢复为基线安装。

于 2013-09-12T14:29:29.090 回答