2010-01-08 39 views
2

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

例如,它会转换成该...

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

要这个......

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

有谁知道一个的,还是我将不得不推出自己的?

+0

难道'PaymentsArray.GetUpperBound(0)'是'的UBound函数(PaymentsArray)'相当于现代的? – Gabe 2010-12-22 03:09:13

回答

2

你需要为这些功能进行转换吗? vb6的功能在vb.net中工作得很好。

+0

当前。我怀疑有一天他们会摆脱Microsoft.VisualBasic.dll?我们现在想摆脱它。 – 2010-01-09 01:08:41

+0

虽然你做得很好! – 2010-01-09 01:11:31

+0

您可以删除对microsoft.visualBasic.dll的引用,并使用正则表达式对搜索和替换进行更正。但是,某些功能的行为并不完全相同。例如,.net str.trim()修剪回车符,但vb trim(str)不会。 – xpda 2010-01-09 02:18:54

1

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

如果你还没有转换代码,你可以选择购买Artinsoft's VB Upgrade Companion,它可以做你想要的转换some,作为VB6到VB.Net转换的一部分。

0

借助gmStudio,Great Migrations的VB6/ASP/COM分析和重新设计工具,您可以通过更改'字符串机器'使用的'表单形式'来控制这些事物,因为它解释了由其生成的pcode编译器和作者所需的符号。例如,这里是默认的表面形成了莱恩:

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

要定制的莱恩操作发出的C#代码,你可以申请一个覆盖并创建一个自定义的转换配置:

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

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

这是一个非常简单的情况的简化,但这就是主意。

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