2010-01-08 1 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

ответ

2

Вам нужна конверсия для этих функций? Функции vb6 отлично работают в vb.net.

+0

В настоящее время. Я подозреваю, что когда-нибудь они избавятся от Microsoft.VisualBasic.dll? Мы хотим избавиться от него сейчас. –

+0

Вы делаете хороший момент, хотя! –

+0

Вы можете удалить ссылку на microsoft.visualBasic.dll и исправить ошибки, используя регулярные выражения для поиска и замены. Однако некоторые из функций не ведут себя точно так же. Например, .net str.trim() обрезает возврат каретки, но обрезать vb (str) нет. – xpda

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, инструмента анализа и реорганизации VB6/ASP/COM от Great Migrations, вы можете управлять этими вещами, изменив «поверхностные формы», используемые «машиной строк», поскольку он интерпретирует код, созданный его компилятора и авторов в нужной записи. Например, здесь поверхность по умолчанию формирует для Len:

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

Для настройки C# код, излучаемые для работы Len вы можете применить переопределение и создать пользовательскую конфигурацию перевода:

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

Заполнитель % 1d указывает, где исходный параметр должен быть отправлен в поток кода C#.

Это упрощение очень простого случая, но это идея.

ПРИМЕЧАНИЕ: форма поверхности по умолчанию ближе к исходной семантике VB6. Например, string.Length выдает исключение в C#, если аргумент имеет значение null, но VBNET.Strings.Len() возвращает 0. Это говорит о том, что если вы никогда не ожидаете, что пустая строка будет выбрасывать исключение при возникновении события, нет - по крайней мере, у вас есть выбор.