(非常)很久以前,我编写了一个 VB5 程序,由于某种原因我今天仍在使用它。我花了将近 5 年的时间才完成,直到最近我才因为它的年龄而遇到问题。
事实上,只有一个部分给我带来了问题,那就是使用的 Webbrowser Control。 Web浏览器控件加载网页(显然),但在过去几年中,越来越多的网站拒绝显示,因为它检测到旧版本的IE(Web浏览器控件基本上是什么)。相反,这些网站会显示一条消息“您正在使用不受支持的浏览器,请更新”。现在,我可能可以通过提供现代浏览器的用户代理字符串来绕过此消息,但这些网站不再支持 IE 当然是有充分理由的。只是因为 IE 确实无法渲染这些网站。
另一个问题是网络浏览器控件显然拒绝显示安全站点(https)。我认为是因为它使用了不再有效的旧证书。
长话短说,该程序目前的形式已经达到了生命的终点。重写整个程序对我来说不是一个选择,因为这样做需要时间(可能需要数年,因为它确实是一个巨大的程序),而且我根本没有时间这样做。所以我猜我有两个选择:使用替代控件(我猜 VB5 不存在)或自动迁移到另一种语言。当然,所有 VB5 源代码都可用。
我的问题是,这可能吗?有什么办法可以让它再次工作吗?有人有什么想法吗?或者我只有两个选择:要么重写程序,要么转储它?
一条评论建议首先迁移到 VB6 ...并使用迁移向导。
但是:您可能会面临这样的问题:迁移向导无法完成完整的工作,因此您仍有大量工作要做。
再次强调,但是:几年前(00 年代初期)我面临着迁移大型应用程序的问题。我们做不到。因此,我们创建了一个“混合”应用程序(带有 .NET 部分的 VB6)。后来,我们采取了相反的方式:让 .NET 应用程序调用旧的 VB6 表单/类,但那是几年后的事了。
那么:如何编写一个 .NET 类(比如说,浏览器部分所需的完整表单),使该类/表单 COM 可见,并将其添加到您的 VB6 解决方案中...
如果你尝试一下,你不会损失太多。
我认为使用 VB5 进行更新是不可行的,它只存在了一年半的时间。 VB6 具有新的数据控件,通常是公司在接下来的几年中投入精力的内容。
更新到 VB6,然后更新到 VB.Net(鉴于您的 Perl 和 Php 背景,可能会更新到 C#)当然是可能的。 完成起来有多容易取决于您的程序是如何编写的。 如果它在业务逻辑和表单以及类型安全方面很好地分离,那么它可能相当微不足道。 如果你的显示与你的逻辑混合在一起,有时使用变量作为字符串,有时作为整数,有时作为变体,那么如果不付费,它几乎是没有希望的。
你说你的程序很大,但是你没有给出类或文件的数量,你确实需要知道要制作的类或文件的数量以及程序编写得如何才能给出粗略的估计。 如果复杂性在于业务逻辑,那么可以想象,基本上不会发生任何变化。
一个建议,一旦完成转换,立即打开选项推断和选项严格。 另外,在进行转换时,不要被大量错误吓倒。 其中许多问题可以通过创建相当于 VB6 的控制数组来集体修复。
首先迁移到 VB6 是一条明智的路线。 然后我建议迁移到 twinBASIC 编程语言,它可以导入 VB6 源代码和表单。