C# 有没有VB6到C的移植工具?

C# 有没有VB6到C的移植工具?,c#,vb6,porting,vb6-migration,C#,Vb6,Porting,Vb6 Migration,有人知道如何将VB6代码转换为C#吗 有没有一个工具可以帮我做到这一点 有什么迁移过程可以让我这么做吗?VisualStudio提供了(或至少提供了)一个向导来完成从VB6到VB.NET的转换(然后可以通过一点工作将其转换为C,可能需要借助于#develop的VB.NET C#转换器),但当我上次使用它时,对于任何非琐碎的事情,都有大量的手工工作需要完成,因此我怀疑如果这是一个大型和/或重要的应用程序,您最好手工重写或移植。使用新版本的Visual Studio打开您的项目,将代码转换为VB.N

有人知道如何将VB6代码转换为C#吗

有没有一个工具可以帮我做到这一点


有什么迁移过程可以让我这么做吗?

VisualStudio提供了(或至少提供了)一个向导来完成从VB6到VB.NET的转换(然后可以通过一点工作将其转换为C,可能需要借助于#develop的VB.NET C#转换器),但当我上次使用它时,对于任何非琐碎的事情,都有大量的手工工作需要完成,因此我怀疑如果这是一个大型和/或重要的应用程序,您最好手工重写或移植。

使用新版本的Visual Studio打开您的项目,将代码转换为VB.Net,然后下载以帮助您进行C#转换

祝你好运

(现更名为)正是这样做的,特别是

然而,即使在使用VBUC之后,系统中仍有一些部分需要手动移植/验证。但它通常是一个小得多的原始问题集。由于过去的迁移经验,一些迁移问题已经得到解决

Artinsoft就是在TheAcconBear的帖子中提到的,与VisualStudio一起提供向导的公司。但是,如果我没有弄错的话,向导只会将VB6迁移到VB.Net


充分披露:我为Artinsoft工作,这可能会让人觉得有点无礼,但你的大脑可能是最好的工具。 可能值得重写

也许你不需要移植它。VB6是否可以转换为COM组件?
连接到COM,从C#呼叫,朱迪法官及时到家。

我使用了两个免费的:


简而言之,VB6和VB.NET(以及因此产生的C#)是独立的语言,但却是相关的语言。这两个平台之间存在许多细微的差异(整数是Int32而不是Int16)和显著的差异(图形、表单和打印引擎)。您需要将其视为您正在转换到一个完全不同的平台。

作为一个已经多次这样做的人,这不是一个容易的过程。您可以使用中所述的VB6到VB.Net工具,然后使用Reflector或SharpDevelop转换为C#。对于SharpDevelop转换,有几个注意事项。它搞乱了所有数组引用并认为它们是函数调用,所有逻辑运算符都转换为位逻辑运算符(并变成&而不是&&)。有了反射器,你会失去很多东西。此外,VisualStudioConverter在许多大型项目上失败,只是挂起,从未完成

一旦你把代码转换成C#,你就必须开始真正的工作。转换最多只能让你达到50%,你必须修复大量的东西(你会看到你的代码中堆满了TODO),重构大量的东西,最后你只剩下C,这是你的VB6的一种表示形式——除非你有非常好的VB6代码,而不是你真正想去的地方。此外,您的所有代码中可能会充斥着VB帮助程序,而不是使用适当的DotNet函数(例如,所有字符串函数都是帮助程序而不是类对象)。如果您使用了所有变量,则所有这些都必须重写。如果您使用了大量API调用,则它们往往需要重写


最终你会有一个基础,但转换一个大型项目(20-30个表单、30个类、30个模块)可能需要几个人月的时间。然而,从头重写可能需要两倍的时间,你会失去所有的业务逻辑。因此,这是可以做到的(我已经用3到4个大型项目完成了),但没有灵丹妙药,没有灵丹妙药,任何说它能单独为您解决问题的工具都是在撒谎。

要问自己的一个问题是,拥有C#而不是VB.NET有多重要?如果您正在转换大型应用程序,也许您应该升级到VB.NET,这样会更便宜

VB6中有一些功能在C#中没有完全相同的功能(错误处理、后期绑定等)。问问自己,当您可以转到支持这些功能的VB.NET时,为什么手动转换这些功能是值得的


如果你不相信我(没有人投票支持我的答案,呜呜呜呜!),也许你会相信和丹·阿普尔曼(在一本书中)同意我的观点。

在GreatMigrations,我们手工完成这项工作——我们用手开发一个VB6/COM编译器。编译器读取一个VBP(或一组相关的VBP)并引用COM库并构造一个“语义模型”。该模型是一组极为详细的符号表和操作码流,全面准确地描述了源系统定义的所有信息结构和执行的操作

然后,该工具应用一系列算法来修改和重构模型,使其与.NET更兼容,并可选择应用自定义转换;例如,用.NET类替换COM组件。转换规则由人设计,并“手动”创建,以满足其独特需求

最后,模型被“执行”,但我们没有分配数据模型和执行操作,而是以目标平台的符号编写文件结构、数据模型和操作。我们可以使用这种方法编写VB.NET和C#。我们还使用此过程将ASP站点迁移到ASPX,(我们还有一个多方言FORTRAN-to-C产品)

这种方法并不能在第一次尝试时就生产出适合生产的软件,但它可以被改进并使其生产出“更好的”产品"通过修改工具的配置和重新运行翻译过程来使用软件。我们工具的优势在于其可重复性、速度和灵活性,这有助于采用敏捷的工具辅助重写方法。IMO,利用我们方法的迁移团队将受益于分配更多资源来评估Alternate用于重新设计和开发过程改进的IVE,而不是重新收集功能r