【问题标题】:VB6 creates corrupt compiles...?VB6 创建损坏的编译...?
【发布时间】:2015-05-12 02:17:02
【问题描述】:

我早就知道 VB6 很麻烦,但我能做些什么 - 我有一个遗留系统要维护,而且它仍在到处开发。

我刚刚在使用 VB6 时遇到了最奇怪的事情。

编译了我们应用程序的新版本。测试它 - 它有效。

部署到客户端生产站点。应用程序不断崩溃!什么时候?当用户单击我们在特定窗口中的 DHTMLEdit 控件内的任何位置时。有时甚至在包含它的窗口上。

现在,我以前遇到过这个问题,但解决方案总是很神秘。所以我尝试了以下方法:将项目的修订号增加 1,重新编译,你猜怎么着?

完美运行。

我无法显示代码,因为我们在这里讨论了 50,000 行代码,并且在单击 DHTMLEdit 控件、表单等时没有调用特定代码。

我只是想知道是否有其他人遇到过这种奇怪的事情。

【问题讨论】:

  • 您是如何部署已编译的应用程序的?如果使用任何类型的安装程序,则可能某些组件在增加版本号之前没有更新。 (我们这里用VB6很多年了,只有编译出现问题的情况很少,我们在项目属性中选择了一些优化,否则不会出现故障。当然安装问题也很多。)
  • @Arvo - 感谢您的评论。该程序使用了许多外部依赖项,但我们没有更改它们,因此我们只部署了主 .exe 文件。这很奇怪,我已经使用了很多年了,以前从未发生过。
  • 这可能是编译时出现的一些 [内存、磁盘、其他硬件] 故障。当然,您也必须注意 jmoreno 的回答 - 在软件世界中没有任何保证:)
  • 没有错误信息没有人可以说任何话。您所说的任何内容都不会让人认为这是一个 VB6 问题。 VB 是有史以来最流行的语言。

标签: vb6


【解决方案1】:

VB6 编译器不是确定性编译器,不会产生任何接近一致的输出。 IOW,虽然修复您的错误不是设计使然,但它可以产生这种行为的事实是。

但即使在确定性编译器中,进行微小的更改有时也可以“修复”(也称为隐藏)由内存对齐或变量初始化触发的错误

【讨论】:

  • 感谢您的评论。所以这实际上是可能发生的事情吗?除了在几台机器上测试之外,除了在发货之前有什么方法可以告诉我们吗?
  • 不,在不同的机器上测试,并测试您打算部署的版本——重新编译而不更改代码将从根本上修改生成的输出(您的程序)。作为旁注,我认为 50k LOC 在“如果我们使用它可以并且应该被迁移”领域内很好。我知道当没有最终用户可见的好处时,没有人喜欢做某事,但如果可能的话,我会推荐它。
  • @jmoreno,愿意提供一些链接来证实您的主张吗?对组件使用二进制兼容性,我们在这里还没有看到“彻底修改”的结果,但我们也没有进行如此深入的分析。
  • @jmoreno - 你是绝对正确的。我很想迁移到 VB.Net,但我们之前尝试过,得到了一个包含大约 6,000 个错误(不是警告,错误)的项目。
  • @user884248:这并不让我感到惊讶,但其中大多数应该很容易修复。例如,使用 DataField,您可以将其切换到 Tag 或创建允许您伪造它的组件。一次可以修复数百甚至数千个此类错误。
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多