我在VB6中编写项目。我使用的是Win7-32位并且项目有问题,这个项目已经写了很多年了,现在我正在重新编译它。当我发出Make xxx.exe命令时,VB6开始编译并冻结并创建超过10,000个* .tmp文件,几分钟后它关闭IDE并且没有任何内容。 我的错误在哪里?
答案 0 :(得分:4)
在编译大型可执行项目时,VB6冻结问题的作用是将VB应用程序的CPU核心限制为仅一个核心(即,对于VB6进程,关联掩码设置为1)。 p>
请注意,仅当VB6进程以affinity mask设置为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。
答案 1 :(得分:2)
我(令人惊讶地)之前遇到了类似的问题。
最佳解决方案是开始更改项目设置。
右键单击您的项目,然后转到“属性”。在“编译”选项卡下,转到“高级优化”。关闭“假设没有别名”可能是你最好的选择。但是,如果禁用该按钮,请尝试从P代码切换到本机代码。
如果上述更改无效,并且您尚未使用P-Code,请尝试使用P-Code。
最后,如果你真的想坚持使用Native Code,请尝试选择No Optimization。
如果事情似乎仍然不起作用,只需浏览设置并取消选中不同的优化。
如果您在所有这些问题后仍然遇到问题,请尝试打开项目中的每个表单和其他文件,然后查看特定文件是否只是损坏,这可能会导致突然退出。至少这种方式你可以将它追踪到一个文件。
如果失败了,请尝试在不同的操作系统上进行编译 - 但我真的怀疑它是否会达到这一点。
祝你好运!答案 2 :(得分:2)
我尝试了每个PhoeniX_2的建议。他们都没有工作。我不知道是什么让我尝试这个,但上次编译时,我创建了一个新的exe文件名,而不是我以前的版本。谢天谢地,它有效。我不明白为什么。这不是权限问题或锁定文件问题。我认为这可能是因为新的编译覆盖了以前的编译的exe文件。在2天的故障排除期间,计算机也重启了几次。
因此,如果Phoenix的建议都不适合你,那么尝试编译一个新的exe文件名,而不是用你之前的编译创建的。
答案 3 :(得分:0)
我个人在Windows XP及更高版本中遇到过VB6 IDE的各种问题。
我保持虚拟机运行Windows 2000,并在其中执行任何VB6工作。
我遇到的问题很少。如果有任何奇怪之处,我只需将VM恢复为基线安装。
答案 4 :(得分:0)
我找到了原因。 我们有用户控件试图在Initialize事件期间连接到数据库。这是一个非常糟糕的主意,因为此事件在编译期间以及在IDE加载期间运行。 它挂起很长时间试图连接到不存在的数据库,然后崩溃编译过程,因此没有生成Exe(虽然没有可见的符号)。
解决方案是在从Load事件表单调用的公共方法中执行db连接和其他启动代码。 似乎没有任何可靠的方法来使用Initialise。