【问题标题】:how to convert vb6 to visual c++ native code?如何将 vb6 转换为 Visual c++ 本机代码?
【发布时间】:2011-04-24 13:50:57
【问题描述】:

我们有一个客户想要将一堆 VB6 项目转换为 VC++ 本地代码。我想知道是否有任何工具可用于此类转换。

我们尝试了http://vbto.net/,它可以转换,但会产生大量编译错误。该工具将所有 cpp 项目创建为“exe”,而许多源 VB6 项目是“activex dll”。

VB6 项目如何映射到 VC++ 项目?例如,“activex dll”是否映射到 vc++ ATL 项目?我们应该注意什么?如果您能分享您的经验,我们将不胜感激。

(是的,我们的第一反应是建议转换为 VB.NET/C#,但程序需要在没有安装 .NET 框架的机器上运行,并且还调用 kernel32.dll 中的方法)

【问题讨论】:

  • 为什么要转换成 C++?有什么好处?顺便说一句,.Net 框架作为 Windows 的一部分安装在最新版本上,您可以通过 Pinvoke 从 .Net 调用 Kernel32。尽管您很可能在不调用 Kernel32 的情况下在纯 .Net 中实现相同的效果。
  • 为什么要转换?如果你不能证明重写当前程序应该没问题。使用自动工具转换的任何大小的 VB6 项目都将难以维护。
  • 我们确实最终使用了 vbto.net 并手动修复了编译器错误。这很困难,但我们成功地移植了代码。完全重写对我们来说不是一个选项,因为运行应用程序的新系统没有安装任何 .net 运行时或 Visual Basic dll。

标签: visual-c++ vb6


【解决方案1】:

你不能。也许您可以将 vb6 代码转换为 vb.net。然后您可以轻松地将其转换为 c# 或托管 c++(所有 .net 语言都编译为 msil,因此可以使用反射器等轻松转换为另一个 .net 语言。)

【讨论】:

  • 不能转换为托管代码(vb.net、c# 或托管 c++ 或任何其他代码),.net 框架在目标计算机上不可用。
  • 您的链接将我带到 VB.NET 到 C++ 转换器。我正在寻找 VB6 到 VC++ 的转换器。
  • 你是对的。他们说使用他们的迁移工具将 vb6 升级到 vb.net,然后使用 vb.net 到 c++ 工具。我认为剩下的唯一可能就是完全重写。
  • 随着代码库大小的增加,完全手动重写往往会失败。那些说“手动重写是你唯一的选择”的人通常没有尝试这样做。
【解决方案2】:

您可以考虑使用能够处理完整转换的迁移工具。见What kinds of patterns could I enforce on the code to make it easier to translate to another programming language?

所涉及的 DMS 引擎具有完整的 VB6 和 Visual C++ 解析器,并且可以应用将 VB6 表面语法映射到 Visual C++ 表面语法的转换规则。

翻译规则必须有人写,而且有很多要写的;您需要为每种语言结构和可能发生的上下文提供一个。这意味着在您的情况下,如果确实需要,您需要特殊规则才能将翻译生成为 DLL 而不是 .exe。写这样的规则比看起来更难,主要是因为你需要写的数字,通常在 1000-2000 的顺序上;这不适合胆小的人。但它可以产生非常可靠的翻译器(阅读链接中的答案以获取更多详细信息)。

你没有说什么是“一堆代码”。在较小的范围内,您可以使用更多的临时方法(手动翻译、修补糟糕翻译器的输出 [例如,您讨论的翻译器] 等)。在足够的规模下,自动转换是一种有效的方法。

【讨论】:

  • 这可能是最可靠的解决方案,但正如您所说,这不适合胆小的人。我们没有使用这个。我们使用 vbto.net 并手动修复了所有编译器错误。
  • 那么您使用 vbto.net 转换了多少代码?经历了多少并正确转换?你花了多长时间修好其余的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
相关资源
最近更新 更多