将旧版VB6函数调用转换为.NET的实用程序

时间:2010-01-08 19:51:31

标签: .net vb.net vb6 legacy-code vb6-migration

我正在寻找一个实用程序/工具来将对旧版VB6函数的调用转换为.NET等价函数。

例如,它会将此转换为...

FormatCurrency(Cart.TotalAmount)
Len(Str)
UCase(Str)
UBound(PaymentsArray)

对此...

Cart.TotalAmount.ToString("c")
Str.Length
Str.ToUpper()
PaymentsArray.Length - 1

有人知道一个,或者我将不得不自己动手?

4 个答案:

答案 0 :(得分:2)

您是否需要转换这些功能? vb6函数在vb.net中运行得很好。

答案 1 :(得分:1)

如果您的代码已经转换为工作VB.Net,为什么不直接保留这些调用呢?例程在Microsoft.VisualBasic.dll中,它是一个fully supported part of the .NET framework,只要.NET存在就会存在。如果你愿意,可以避免在新代码中使用它们,但是做额外的工作以将它们从现有代码中取出似乎是非常不必要的。

如果您尚未转换代码,则可以选择购买Artinsoft's VB Upgrade Companion,这可以执行您要求的转换some,作为VB6到VB.Net转换的一部分。< / p>

答案 2 :(得分:0)

使用gmStudio,Great Migrations的VB6 / ASP / COM分析和重新设计工具,您可以通过更改“字符串机器”使用的“表面形式”来控制这些内容,因为它解释了由其编译器生成的pcode并以所需的符号创作。例如,以下是Len的默认表面形式:

  <subcode id="Len">
     <vbn role="function" narg="1" code="Strings.Len(%1d)"/>
     <csh role="function" narg="1" code="VBNET.Strings.Len(%1d)"/>
  </subcode>

要自定义为Len操作发出的C#代码,您可以应用覆盖并创建自定义转换配置:

  <subcode id="Len">
     <csh role="function" narg="1" code="%1d.Length"/>
  </subcode>

占位符%1d表示应将原始参数发送到C#代码流的位置。

这是一个非常简单的案例的简化,但这就是这个想法。

注意:默认表面形式更接近VB6的原始语义。例如,如果参数为null,则string.Length在C#中抛出异常,但是VBNET.Strings.Len()返回0.这就是说,如果你从未期望一个空字符串,那么在发生异常时抛出异常可能是有利的 - 或者不 - 至少你可以选择。

答案 3 :(得分:0)

此处提供了Microsoft提供的免费迁移工具。它在VS2003发布时发布。

你在这里得到它:http://blogs.msdn.com/b/bethmassi/archive/2010/07/08/free-vb6-migration-tool-amp-updated-vb-developer-center.aspx