【问题标题】:Utility to Convert Legacy VB6 Function Calls to .NET [closed]将旧版 VB6 函数调用转换为 .NET 的实用程序 [关闭]
【发布时间】:2025-11-25 21:55:02
【问题描述】:

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

例如,它会转换这个...

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

到这里……

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

有人知道吗,还是我必须自己动手?

【问题讨论】:

  • PaymentsArray.GetUpperBound(0) 不会是 UBound(PaymentsArray) 的现代等价物吗?

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


【解决方案1】:

您需要对这些功能进行转换吗? vb6 函数在 vb.net 中运行良好。

【讨论】:

  • 目前。我怀疑有一天他们会摆脱Microsoft.VisualBasic.dll?我们现在想摆脱它。
  • 不过你说得很好!!
  • 您可以删除对 microsoft.visualBasic.dll 的引用并使用正则表达式进行搜索和替换来更正错误。但是,某些功能的行为并不完全相同。例如,.net str.trim() 会修剪回车,但 vb trim(str) 不会。
  • Microsoft.VisualBasic.dll 100% 是 .NET 的一部分,只要 .NET 存在,它就会存在。 *.com/questions/226517/…
【解决方案2】:

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

如果您尚未转换代码,您可以选择购买Artinsoft's VB Upgrade Companion,它可以完成您要求的some 转换,作为 VB6 到 VB.Net 转换的一部分。

【讨论】:

    【解决方案3】:

    使用来自 Great Migrations 的 VB6/ASP/COM 分析和重新设计工具 gmStudio,您可以通过更改“字符串机器”在解释其编译器生成的 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 的原始语义。例如,如果参数为空,则 string.Length 在 C# 中引发异常,但 VBNET.Strings.Len() 返回 0。也就是说,如果您从不期望空字符串,那么在发生异常时抛出异常可能是有利的——或者不是——至少你有选择的余地。

    【讨论】:

      【解决方案4】:

      这里有一个来自 Microsoft 的免费迁移工具。是在VS2003发布的时候发布的。

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

      【讨论】: