Преобразование ваших проектов из vb6 в vb net


Содержание

Конвертировать проект из vb6 в vb.net Visual Studio 2008

Я хочу преобразовать мой старый проект vb6 в решение vb.Net, когда я открываю команду do: File->Open->Convert вот что я получаю:

И я не могу найти способ показать доступные конвертеры .

Я должен попробовать:

  • Установка фреймворка 1.0, так как я где-то читал, что это нужно
  • Попытался установить framework 2.0, но там написано «У меня есть», но он не отображается в списке удаления программ.
  • Попробовал установить фреймворк 3.0, так же, как и раньше.
  • Я даже пытаюсь добавить Microsoft.VisualBasic.UpgradeWizard.dll через regasm но не могу открыть консольную команду в VS2008, только в VS2010, и я прочитал, что VS2010 не может обработать преобразование из vb6 в vb.net, это сначала должен пройти над VS2008.

2 ответа

Итак, решение было установить Visual Studio 2005, тогда были доступны конвертеры:

Полагаю, мне нужен был Framework 1.0.

Он не идеален, в нем есть некоторые ошибки, но это шаг вперед для полного решения.

Конечно, я нашел некоторые другие программы конвертации, но они дорогие:

Надеюсь, это поможет кому-то еще!

Понятия не имею, для чего предназначен этот диалог — ничего не поделаешь.

Согласно этому сообщению на форуме , вы можете открыть vbp в Visual Studio, и он должен попросить преобразовать проект (нет возможности открыть файл .vbp в VS 2010). Тем не менее, даже если это все-таки было сделано в VS 2010, это ужасно плохая идея.

Смотрите также этот пост о преобразовании VB6 в VB.NET.

Кроме того, проверьте эти дублированные вопросы SO:

Изменить: в соответствии с этой страницей MSDN мастер преобразования работает только в Visual Studio 2005

Редактировать Редактировать: согласно комментарию MarkJ, Visual Studio 2008 включает в себя мастер обновления . Это ушло в VS 2010.

Конвертировать VBA в VB6 и создать. DLL — как — советы, советы и риски

Я должен преобразовать огромную нагрузку кода, который был написан в VBA (Excel) в VB6. Но я действительно не знаю, о чем мне нужно заботиться или с чего начать. Поэтому было бы здорово получить здесь несколько советов от экспертов VB6.

Я уже установил MS Visual Studio и немного поиграл. Но я не эксперт по VB6 и не знаю, что мне делать.

Конечная цель — собрать весь код VBA, который в настоящее время помещен в один макрос Excel VBA, в проект VB6 и создать из него файл DLL. На этот .dll должен ссылаться Excel, и Excel должен работать так же, как и сейчас :-)

Например, что мне нужно сделать, чтобы преобразовать этот код VBA в VB6.

Изменить: Да, и если это возможно, чтобы преобразовать код VBA в. DLL, это было бы также хорошо. Тогда бы мне не пришлось конвертировать код. Но я думаю, что возможно создать только DLL-файл из кода vb6.

3 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Хорошо, я на самом деле учусь этому с тобой, так что вот,

Код VB.Net (я использую .net 2.0)

В Visual Studio 2005 откройте новый проект библиотеки классов Затем удалите весь мусор, уже написанный там и вставьте код

Постройте решение, нажав F6 перейдите в Project-> Project Properties и проверьте регистр для взаимодействия COm

Таким образом, выходные данные являются .DLL и .tlb, файл Excel должен ссылаться на файл .tlb,

вы должны зарегистрировать DLL по regasm/codebase c: \ Excel \ dllname.dll

Затем вы можете получить доступ к функции из Excel.

Вот ссылка на папку моего проекта разархивировать его, и вы найдете книгу Excel, которая содержит ссылку на .dll через .tlb

Вот еще одна замечательная статья

Конвертировать в VB6 легко.

Создайте проект VB6 DLL. Поищите в Интернете инструкции о том, как это сделать и как предоставить методы, классы и функции.

Добавьте ссылку на «Microsoft Office Excel ## библиотека».

В процедуре проекта, которая будет представлена ​​как метод в DLL, добавьте следующий код:

Продолжайте использовать обычный код VBA с одной модификацией: глобально доступными объектами, такими как ActiveSheet или же ActiveWorkbook или же Sheets должен стать E.ActiveSheet , E.ActiveWorkbook а также E.Sheets .

Если у вас есть формы в вашем проекте VBA, их преобразование будет немного сложнее, потому что формы совершенно разные в VB6 и VBA (они долго не работают одинаково).


У вас не должно возникнуть проблем с преобразованием кода из .VBA в vb6.На самом деле вам это практически не нужно.

Проблема в контексте VB6, язык не может понять, что

««Application.Worksheets (a) .range (« C3 »). Value)» означает,

объект приложения имеет другое значение в VB6

VBA (версия VBA у вас есть) — это почти индивидуальная реализация VB6 в Excel (или word, или что-нибудь, что поставляется с MSO).

Было бы плохой идеей попытаться получить доступ к интерфейсу Excel из VB6 (я даже не уверен, если это возможно)

вам нужно отделить бизнес-логику от кода, а затем превратить ее в библиотеку VB6.

Например ваш код (как я понимаю) возвращает значение ячейки C3

Он очень сильно привязан к пользовательскому интерфейсу Excel, поэтому он будет очень контрпродуктивным, если не будет невозможным преобразовать ваш код в VB6.

потому что даже если вы преобразуете код, большинство переменных, таких как (Application.Worksheets (a) .range («C3»). Value), должны вызываться из VBA, что бессмысленно

однако, если у вас есть какая-либо другая чистая бизнес-логика, ее можно портировать (это забавно, потому что портировать действительно нечего)

Функции преобразования типов (Visual Basic) Type Conversion Functions (Visual Basic)

Эти функции компилируются встроенным, то есть код преобразования является частью кода, который вычисляет выражение. These functions are compiled inline, meaning the conversion code is part of the code that evaluates the expression. Иногда нет вызова процедуры для выполнения преобразования, что повышает производительность. Sometimes there is no call to a procedure to accomplish the conversion, which improves performance. Каждая функция приводит выражение к определенному типу данных. Each function coerces an expression to a specific data type.

Синтаксис Syntax

Отделение Part

expression
Обязательный. Required. Любое выражение исходного типа данных. Any expression of the source data type.

Тип данных возвращаемого значения Return Value Data Type

Имя функции определяет тип данных возвращаемого значения, как показано в следующей таблице. The function name determines the data type of the value it returns, as shown in the following table.

Имя функции Function name Тип возвращаемых данных Return data type Диапазон для аргумента expression Range for expression argument
CBool Логический тип данных Boolean Data Type Любое допустимое Char или String или числовое выражение. Any valid Char or String or numeric expression.
CByte Тип данных Byte Byte Data Type Byte.MinValue (от 0) до Byte.MaxValue (255) (без знака); Дробные части округляются. 1 Byte.MinValue (0) through Byte.MaxValue (255) (unsigned); fractional parts are rounded. 1

Начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в байты с помощью функции CByte . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to byte conversion with the CByte function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CChar Тип данных Char Char Data Type Любое допустимое выражение Char или String ; преобразуется только первый символ String ; значение может быть от 0 до 65535 (без знака). Any valid Char or String expression; only first character of a String is converted; value can be 0 through 65535 (unsigned).
CDate Тип данных Date Date Data Type Любое допустимое представление даты и времени. Any valid representation of a date and time.
CDbl Тип данных Double Double Data Type -1.79769313486231570 e + 308 до-4.94065645841246544 E-324 для отрицательных значений; 4.94065645841246544 e-324 до 1.79769313486231570 E + 308 для положительных значений. -1.79769313486231570E+308 through -4.94065645841246544E-324 for negative values; 4.94065645841246544E-324 through 1.79769313486231570E+308 for positive values.
CDec Тип данных Decimal Decimal Data Type +/-79,228,162,514,264,337,593,543,950,335 для чисел с нулевым масштабом, то есть чисел без десятичных разрядов. +/-79,228,162,514,264,337,593,543,950,335 for zero-scaled numbers, that is, numbers with no decimal places. Для чисел с 28 десятичными разрядами диапазоном является +/-7.9228162514264337593543950335. For numbers with 28 decimal places, the range is +/-7.9228162514264337593543950335. Наименьшее возможное ненулевое число — 0,0000000000000000000000000001 (+/-1E-28). The smallest possible non-zero number is 0.0000000000000000000000000001 (+/-1E-28).
CInt Тип данных Integer Integer Data Type Int32.MinValue (от-2 147 483 648) до Int32.MaxValue (2 147 483 647); Дробные части округляются. 1 Int32.MinValue (-2,147,483,648) through Int32.MaxValue (2,147,483,647); fractional parts are rounded. 1

Начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования с плавающей запятой в целочисленную с помощью функции CInt . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to integer conversion with the CInt function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CLng Тип данных Long Long Data Type Int64.MinValue (от-9223372036854775808) до Int64.MaxValue (9 223 372 036 854 775 807); Дробные части округляются. 1 Int64.MinValue (-9,223,372,036,854,775,808) through Int64.MaxValue (9,223,372,036,854,775,807); fractional parts are rounded. 1

Начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в 64-разрядное целочисленное преобразование с помощью функции CLng . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to 64-bit integer conversion with the CLng function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CObj Тип данных Object Object Data Type Любое допустимое выражение. Any valid expression.
CSByte Тип данных SByte SByte Data Type SByte.MinValue (от-128) до SByte.MaxValue (127); Дробные части округляются. 1 SByte.MinValue (-128) through SByte.MaxValue (127); fractional parts are rounded. 1

Начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования байтов с плавающей запятой в CSByte ную функцию. Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to signed byte conversion with the CSByte function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CShort Тип данных Short Short Data Type Int16.MinValue (от-32 768) до Int16.MaxValue (32 767); Дробные части округляются. 1 Int16.MinValue (-32,768) through Int16.MaxValue (32,767); fractional parts are rounded. 1

Начиная с Visual Basic 15,8 Visual Basic оптимизирует производительность преобразования с плавающей запятой в 16-разрядное целочисленное преобразование с помощью функции CShort . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to 16-bit integer conversion with the CShort function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CSng Тип данных Single Single Data Type -3.402823 e + 38 – 1.401298 E-45 для отрицательных значений; 1.401298 e-45 до 3.402823 E + 38 для положительных значений. -3.402823E+38 through -1.401298E-45 for negative values; 1.401298E-45 through 3.402823E+38 for positive values.
CStr Тип данных String String Data Type Возвращает для CStr зависят от аргумента expression . Returns for CStr depend on the expression argument. См. раздел возвращаемые значения для функции CStr. See Return Values for the CStr Function.
CUInt Тип данных UInteger UInteger Data Type UInt32.MinValue (от 0) до UInt32.MaxValue (4 294 967 295) (без знака); Дробные части округляются. 1 UInt32.MinValue (0) through UInt32.MaxValue (4,294,967,295) (unsigned); fractional parts are rounded. 1

Начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования с плавающей запятой в целое число без знака с помощью функции CUInt . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to unsigned integer conversion with the CUInt function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CULng Тип данных ULong ULong Data Type UInt64.MinValue (от 0) до UInt64.MaxValue (18446744073709551615) (без знака); Дробные части округляются. 1 UInt64.MinValue (0) through UInt64.MaxValue (18,446,744,073,709,551,615) (unsigned); fractional parts are rounded. 1

Начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования с плавающей запятой в длинное целое число без знака с помощью функции CULng . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to unsigned long integer conversion with the CULng function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

CUShort Тип данных UShort UShort Data Type UInt16.MinValue (от 0) до UInt16.MaxValue (65 535) (без знака); Дробные части округляются. 1 UInt16.MinValue (0) through UInt16.MaxValue (65,535) (unsigned); fractional parts are rounded. 1

Начиная с Visual Basic 15,8, Visual Basic оптимизирует производительность преобразования 16-разрядного целого числа без знака с плавающей запятой в функцию CUShort . Дополнительные сведения см. в разделе «Примечания» . Starting with Visual Basic 15.8, Visual Basic optimizes the performance of floating-point to unsigned 16-bit integer conversion with the CUShort function; see the Remarks section for more information. Пример см. в разделе пример для функции CInt . See the CInt Example section for an example.

1 дробная часть может подвергаться специальному типу округления, называемому банковским округлением. 1 Fractional parts can be subject to a special type of rounding called banker’s rounding. Дополнительные сведения см. в разделе «Примечания». See «Remarks» for more information.

Заметки Remarks

В качестве правила следует использовать функции преобразования типа Visual Basic в качестве предпочтений методам .NET Framework, таким как ToString() , в классе Convert или в отдельной структуре типа или классе. As a rule, you should use the Visual Basic type conversion functions in preference to the .NET Framework methods such as ToString() , either on the Convert class or on an individual type structure or class. Функции Visual Basic предназначены для оптимального взаимодействия с Visual Basicным кодом, а также для сокращения исходного кода и упрощения его чтения. The Visual Basic functions are designed for optimal interaction with Visual Basic code, and they also make your source code shorter and easier to read. Кроме того, методы преобразования .NET Framework не всегда дают те же результаты, что и функции Visual Basic, например при преобразовании Boolean в Integer . In addition, the .NET Framework conversion methods do not always produce the same results as the Visual Basic functions, for example when converting Boolean to Integer . Дополнительные сведения см. в разделе Устранение неполадок типов данных. For more information, see Troubleshooting Data Types.

Начиная с Visual Basic 15,8, производительность преобразования с плавающей точкой в целое оптимизирована при передаче Single или Double значения, возвращаемого следующими методами, в одну из целочисленных функций преобразования ( CByte , CShort , CInt , @no__ t_5, CSByte , CUShort , CUInt , CULng ): Starting with Visual Basic 15.8, the performance of floating-point-to-integer conversion is optimized when you pass the Single or Double value returned by the following methods to one of the integer conversion functions ( CByte , CShort , CInt , CLng , CSByte , CUShort , CUInt , CULng ):

Такая оптимизация позволяет выполнять код, выполняющий большое количество целочисленных преобразований, в два раза быстрее. This optimization allows code that does a large number of integer conversions to run up to twice as fast. В следующем примере демонстрируются эти оптимизированные преобразования с плавающей запятой в целые числа: The following example illustrates these optimized floating-point-to-integer conversions:

Поведение Behavior

Приведение. Coercion. В общем случае можно использовать функции преобразования типов данных для приведения результата операции к конкретному типу данных, а не по типу данных по умолчанию. In general, you can use the data type conversion functions to coerce the result of an operation to a particular data type rather than the default data type. Например, используйте CDec для принудительного выполнения десятичных арифметических операций в случаях, когда обычно выполняется операция с одиночной точностью, двойной точностью или целочисленной. For example, use CDec to force decimal arithmetic in cases where single-precision, double-precision, or integer arithmetic would normally take place.

Неудачные преобразования. Failed Conversions. Если expression , переданный функции, находится за пределами диапазона типа данных, в который она должна быть преобразована, происходит OverflowException. If the expression passed to the function is outside the range of the data type to which it is to be converted, an OverflowException occurs.

Дробные части. Fractional Parts. При преобразовании нецелочисленного значения в целочисленные функции преобразования целочисленных значений ( CByte , CInt , CLng , CSByte , CShort , CUInt , CULng и CUShort ) удаляют дробную часть и округляют значение до ближайшего целого. When you convert a nonintegral value to an integral type, the integer conversion functions ( CByte , CInt , CLng , CSByte , CShort , CUInt , CULng , and CUShort ) remove the fractional part and round the value to the closest integer.

Если дробная часть равна точности 0,5, функции целочисленного преобразования округляют его до ближайшего четного целого числа. If the fractional part is exactly 0.5, the integer conversion functions round it to the nearest even integer. Например, 0,5 округляется до 0, а 1,5 и 2,5 оба округляются в 2. For example, 0.5 rounds to 0, and 1.5 and 2.5 both round to 2. Иногда это называется округлением банкаи предназначено для компенсации смещения, которое может накапливаться при одновременном добавлении многих таких чисел. This is sometimes called banker’s rounding, and its purpose is to compensate for a bias that could accumulate when adding many such numbers together.

CInt и CLng отличаются от Int и Fix функций, которые усекаются, а не округляют дробную часть числа. CInt and CLng differ from the Int and Fix functions, which truncate, rather than round, the fractional part of a number. Кроме того, Fix и Int всегда возвращают значение того же типа данных, что и при передаче. Also, Fix and Int always return a value of the same data type as you pass in.

Преобразования даты и времени. Date/Time Conversions. Используйте функцию IsDate, чтобы определить, можно ли преобразовать значение в дату и время. Use the IsDate function to determine if a value can be converted to a date and time. CDate распознает литералы даты и литералы времени, но не числовые значения. CDate recognizes date literals and time literals but not numeric values. Чтобы преобразовать значение Visual Basic 6,0 Date в Date значение в Visual Basic 2005 или более поздней версии, можно использовать метод DateTime.FromOADate. To convert a Visual Basic 6.0 Date value to a Date value in Visual Basic 2005 or later versions, you can use the DateTime.FromOADate method.

Нейтральные значения даты и времени. Neutral Date/Time Values. Тип данных Date всегда содержит сведения о дате и времени. The Date Data Type always contains both date and time information. В целях преобразования типов Visual Basic учитывает 1/1/0001 (1 января 1 года) как нейтральное значение для даты, а 00:00:00 (полночь) — как нейтральное значение времени. For purposes of type conversion, Visual Basic considers 1/1/0001 (January 1 of the year 1) to be a neutral value for the date, and 00:00:00 (midnight) to be a neutral value for the time. При преобразовании значения Date в строку CStr не включает нейтральные значения в результирующую строку. If you convert a Date value to a string, CStr does not include neutral values in the resulting string. Например, при преобразовании #January 1, 0001 9:30:00# в строку результатом будет «9:30:00 AM»; сведения о дате подавляются. For example, if you convert #January 1, 0001 9:30:00# to a string, the result is «9:30:00 AM»; the date information is suppressed. Однако сведения о дате по-прежнему содержатся в исходном значении Date и могут быть восстановлены с помощью таких функций, как DatePart функция. However, the date information is still present in the original Date value and can be recovered with functions such as DatePart function.

Чувствительность языка и региональных параметров. Culture Sensitivity. Функции преобразования типов, включающие строки, выполняют преобразования в соответствии с текущими параметрами языка и региональных параметров для приложения. The type conversion functions involving strings perform conversions based on the current culture settings for the application. Например, CDate распознает форматы даты в соответствии с настройками языкового стандарта системы. For example, CDate recognizes date formats according to the locale setting of your system. Необходимо указать день, месяц и год в правильном порядке для вашего языкового стандарта, иначе Дата может интерпретироваться неправильно. You must provide the day, month, and year in the correct order for your locale, or the date might not be interpreted correctly. Длинный формат даты не распознается, если он содержит строку дня недели, например «среда». A long date format is not recognized if it contains a day-of-the-week string, such as «Wednesday».


Если необходимо преобразовать в строковое представление значения или из него в формате, отличном от указанного в Вашем языковом стандарте, то нельзя использовать функции преобразования типа Visual Basic. If you need to convert to or from a string representation of a value in a format other than the one specified by your locale, you cannot use the Visual Basic type conversion functions. Для этого используйте методы ToString(IFormatProvider) и Parse(String, IFormatProvider) типа этого значения. To do this, use the ToString(IFormatProvider) and Parse(String, IFormatProvider) methods of that value’s type. Например, используйте Double.Parse при преобразовании строки в Double и используйте Double.ToString при преобразовании значения типа Double в строку. For example, use Double.Parse when converting a string to a Double , and use Double.ToString when converting a value of type Double to a string.

CType Function CType Function

Функция CType принимает второй аргумент, typename и приводит expression к typename , где typename может быть любым типом данных, структурой, классом или интерфейсом, к которому существует допустимое преобразование. The CType Function takes a second argument, typename , and coerces expression to typename , where typename can be any data type, structure, class, or interface to which there exists a valid conversion.

Сравнение CType с другими ключевыми словами преобразования типов см. в разделе Оператор DirectCast и Оператор TryCast. For a comparison of CType with the other type conversion keywords, see DirectCast Operator and TryCast Operator.

Пример CBool CBool Example

В следующем примере функция CBool используется для преобразования выражений в Boolean значения. The following example uses the CBool function to convert expressions to Boolean values. Если результатом вычисления выражения является ненулевое значение, CBool возвращает True ; в противном случае возвращается False . If an expression evaluates to a nonzero value, CBool returns True ; otherwise, it returns False .

Пример CByte CByte Example

В следующем примере функция CByte используется для преобразования выражения в Byte . The following example uses the CByte function to convert an expression to a Byte .

Пример CChar CChar Example

В следующем примере функция CChar используется для преобразования первого символа String выражения в тип Char . The following example uses the CChar function to convert the first character of a String expression to a Char type.

Входной аргумент для CChar должен иметь тип данных Char или String . The input argument to CChar must be of data type Char or String . Нельзя использовать CChar для преобразования числа в символ, так как CChar не может принимать числовые типы данных. You cannot use CChar to convert a number to a character, because CChar cannot accept a numeric data type. В следующем примере получается число, представляющее кодовую точку (код символа), и преобразуется в соответствующий символ. The following example obtains a number representing a code point (character code) and converts it to the corresponding character. Она использует функцию InputBox для получения строки цифр, CInt для преобразования строки в тип Integer и ChrW для преобразования числа в тип Char . It uses the InputBox function to obtain the string of digits, CInt to convert the string to type Integer , and ChrW to convert the number to type Char .

Пример для CDate CDate Example

В следующем примере функция CDate используется для преобразования строк в значения Date . The following example uses the CDate function to convert strings to Date values. Обычно не рекомендуется жестко кодировать даты и время в виде строк (как показано в этом примере). In general, hard-coding dates and times as strings (as shown in this example) is not recommended. Вместо этого используйте литералы даты и временные литералы, например #Feb 12, 1969 # и #4:45:23 PM #. Use date literals and time literals, such as #Feb 12, 1969# and #4:45:23 PM#, instead.

Пример с CDbl CDbl Example

Пример CDec CDec Example

В следующем примере функция CDec используется для преобразования числового значения в Decimal . The following example uses the CDec function to convert a numeric value to Decimal .

Пример функции CInt CInt Example

В следующем примере функция CInt используется для преобразования значения в Integer . The following example uses the CInt function to convert a value to Integer .

Пример с CLng CLng Example

В следующем примере функция CLng используется для преобразования значений в Long . The following example uses the CLng function to convert values to Long .

Пример CObj CObj Example

В следующем примере функция CObj используется для преобразования числового значения в Object . The following example uses the CObj function to convert a numeric value to Object . Сама переменная Object содержит только 4-байтовый указатель, указывающий на присвоенное ему значение Double . The Object variable itself contains only a four-byte pointer, which points to the Double value assigned to it.

Пример Ксбите CSByte Example

В следующем примере функция CSByte используется для преобразования числового значения в SByte . The following example uses the CSByte function to convert a numeric value to SByte .

Пример CShort CShort Example

В следующем примере функция CShort используется для преобразования числового значения в Short . The following example uses the CShort function to convert a numeric value to Short .

Пример CSng CSng Example

В следующем примере функция CSng используется для преобразования значений в Single . The following example uses the CSng function to convert values to Single .

Пример функции CStr CStr Example

В следующем примере функция CStr используется для преобразования числового значения в String . The following example uses the CStr function to convert a numeric value to String .

В следующем примере функция CStr используется для преобразования значений Date в значения String . The following example uses the CStr function to convert Date values to String values.

CStr всегда отображает значение Date в стандартном коротком формате для текущего языкового стандарта, например «6/15/2003 4:35:47 PM». CStr always renders a Date value in the standard short format for the current locale, for example, «6/15/2003 4:35:47 PM». Однако CStr подавляет нейтральные значения 1/1/0001 для даты и 00:00:00 для времени. However, CStr suppresses the neutral values of 1/1/0001 for the date and 00:00:00 for the time.

Дополнительные сведения о значениях, возвращаемых CStr , см. в разделе возвращаемые значения функции CStr. For more detail on the values returned by CStr , see Return Values for the CStr Function.

Пример Куинт CUInt Example

В следующем примере функция CUInt используется для преобразования числового значения в UInteger . The following example uses the CUInt function to convert a numeric value to UInteger .

Пример Кулнг CULng Example

В следующем примере функция CULng используется для преобразования числового значения в ULong . The following example uses the CULng function to convert a numeric value to ULong .

Пример Кушорт CUShort Example

В следующем примере функция CUShort используется для преобразования числового значения в UShort . The following example uses the CUShort function to convert a numeric value to UShort .

От VB 6.0 к Visual Studio .NET

Выпустив в ноябре 2000 г. бета-версию Visual Studio .NET, корпорация Microsoft публично показала, как она собирается реализовывать на технологическом уровне свою новую архитектуру .NET, которая до того представлялась на уровне довольно общих концепций. Вполне естественно, что реакция общественности была двойственной — наряду с одобрением имела место и критика.


Особенно бурно новшества .NET обсуждались в сообществе VB-программистов. Представленный вариант VB.NET не оставил сомнений в том, что переход на новую версию VB будет достаточно сложным и болезненным. Впервые за десять лет существования VB нарушилась совместимость программного кода «снизу вверх», что делает автоматический перенос приложений из VB 6.0 в VB.NET по крайней мере очень проблематичным. Кроме того, и это наиболее существенно, изменилась логика и концепции разработки (см. также статью «В ожидании Visual Studio .NET», «BYTE/Россия» № 1/2001).

Казалось бы, в Microsoft VB.NET наконец-то было выполнено давнишнее требование VB-программистов — максимально приблизить их инструмент к возможностям «настоящих» языков программирования, таких, как C/C++, в частности, убрав многочисленные ограничения и реализовав полноценный режим объектно-ориентированного программирования. Но, как это часто бывает в жизни, у медали обнаружилась и оборотная сторона, а достоинствам сопутствовали серьезные недостатки. Прежде всего для освоения обновленного инструмента требуются немалые усилия. Проблема усугубляется еще и тем, что огромная (насчитывающая по разным оценкам от 2 до 4 млн) армия VB-программистов очень неоднородна по квалификации и характеру решаемых задач. Именно это обусловило раскол VB-сообщества на две части по отношению к новому инструменту. Сторонники VB.NET подчеркивают, что новый VB дает возможность создавать приложения масштаба предприятия, в том числе Web- и серверные приложения. Противники говорили о серьезной угрозе стабильности огромной базы существующего VB-кода и значительных затратах на переобучение программистов.

Участники дискуссии руководствовались чисто практическими интересами — все понимали, что реализация новшеств VB.NET может серьезно повлиять на их личную судьбу. Ведь переход от нынешней архитектуры Windows к будущей .NET может оказаться таким же болезненным, как и переход от DOS к Windows в начале 1990-х.

Появление в июне 2001 года Visual Studio .NET Beta 2 подвело черту под жаркими дискуссиями — стало очевидно, что Microsoft не собирается идти на сколько-нибудь радикальные уступки в ответ на критику нововведений VB.NET (правда, и раньше иллюзии по этому поводу были только у людей, слабо знакомых с бизнес-стратегией детища Билла Гейтса). Именно тогда VB-разработчики должны были всерьез задуматься над вопросом — как жить дальше?

В поисках ответа на этот вопрос мы в прошлом году опубликовали цикл статьей «А ты готов к VB.NET? Советы тем, кто собирается работать с новой версий VB». Сейчас, спустя год, мы подводим итог этого обсуждения, причем в новых исторических условиях — VB 6.0 больше не продается и не поддерживается, на смену ему пришел.

Поспешай не торопясь

Сформулируем основной принцип миграции: она должна выполняться постепенно, без спешки и суеты, но в то же время достаточно уверенно — важно не упустить время. Повторим еще раз: переход от Windows к .NET произойдет совсем не мгновенно, скорее всего, переломный момент наступит через пару лет (об этом говорят простой ретроспективный анализ и здравый смысл, такие же оценки дают и ведущие аналитические агентства). Сейчас архитектура .NET проходит фактически стадию опытной эксплуатации, по итогам которой ее концепция и конкретные решения могут быть подвергнуты определенной коррекции. Об устоявшемся ее варианте можно будет говорить после появления версии .NET Framework 2.0 (а еще лучше — 3.0).

Последовательность перехода на новые инструменты для разных категорий разработчиков обычно выглядит следующим образом.

На этапе бета-тестирования сам поставщик технологии и его ближайшие партнеры выпускают образцово-показательные приложения в маркетинговых целях. Различные независимые эксперты (в том числе журналисты и писатели) стараются успеть выдать «горячую» информацию. Многочисленные любители спешат поиграть с новыми «штучками», особенно если у них есть свободное время. Разработчики дополнительного инструментария для программистов включаются в игру — нужно опередить конкурентов.

После выхода официальной версии в дело вступают разработчики «тяжелых» решений для корпоративного сектора, но плоды их реальной работы появятся лишь спустя пару лет. Спустя еще год-два подключаются разработчики, создающие внутрифирменные корпоративные решения. Еще позднее появляются заказные решения, выполняемые для (или внутри) малых и средних предприятий.

С учетом всего сказанного можно дать два предварительных совета. Во-первых, не спешите удалять свою нынешнюю версию VB. Скорее всего, она понадобится для поддержки значительной части имеющихся у вас программ до окончания их жизненного цикла. Хотя VB.NET имеет рабочий номер версии 7.0, но было бы правильнее назвать пакет VB.NET 1.0. Для VB-программистов миграция на .NET будет более сложной, чем переход от 16-разрядных версий Windows к 32-разрядным, не говоря уже о замене VB 5.0 на VB 6.0. Масштаб изменений более сравним с переходом с DOS Basic на Visual Basic, но сейчас переходный период сократится до 2-3 лет.

Во-вторых, не откладывайте надолго расставание со «старым добрым» VB. Помните о временах 10-летней давности, когда нежелание переходить от функционально более мощного Basic PDS 7.1 к «примитивному» и непривычному VB 1.0 обернулось необходимостью менять профессию для достаточно опытных программистов. Не должно быть никаких иллюзий по поводу того, что Microsoft будет хотя бы какое-то время продолжать поддержку VB 6.0 (его продажи прекратились 1 июня). Соответственно, начинать на нем разработку новых серьезных приложений вряд ли имеет смысл. А вот маленьких. Наверное, на них как раз удобнее осваивать новые системы.

Куда бедному VB-программисту деваться?

Имеется несколько ответов на этот вопрос. Самый радикальный вариант — сменить профессию (как это сделали многие программисты во времена перехода от DOS к Windows и еще раньше — от ЕС ЭВМ к ПК). Если же вы не собираетесь этого делать, разработайте четкую стратегию развития — для самого себя и для своих продуктов. Лучше было бы заняться этим еще года полтора назад, но и сейчас еще не поздно*.

Однако нужно иметь в виду, что речь на самом деле идет не о том, на каком языке писать программы, а о том, на какой операционной платформе вы собираетесь работать. Если вы не хотите иметь дело с .NET и обладаете нужной квалификацией, стоит подумать о переходе на C++. С его помощью вы сможете создавать производительные решения, используя традиционные методы разработки программ (работа с объектными модулями, а не только с объектными библиотеками), не ограничивая себя «управляемым» кодом и обеспечивая себе возможность «межплатформенной» миграции, например, в сторону Java.

Но если говорить о создании программ не системного, а прикладного уровня, то выбор нужно делать между .NET и Java 2 Platform (ранее уже отмечалось, что сравнение отдельных языков, например, C# и Java, некорректно, так как они представляют собой неотъемлемые компоненты соответствующих платформ, и сравнивать нужно платформы в целом). Стратегия выбора, наверное, не должна определяться конкретными технологическими деталями. В данном случае важно, хотите вы иметь дело с платформенными технологиями от одного поставщика или от сообщества поставщиков. И тот и другой вариант имеет свои плюсы и минусы.

Если вы решили делать ставку на Microsoft .NET, то реален также переход с VB 6.0 на C#, который обладает более гибкими возможностями по сравнению с VB.NET. Думаю, Microsoft сознательно сохранила определенные функциональные различия между VB.NET и C#, руководствуясь в основном маркетинговыми соображениями типа «разделяй и властвуй». Впрочем, нужно также отметить, что C# создавался «с чистого листа» специально под .NET, а при модернизации VB.NET корпорация все же была вынуждена учитывать проблему унаследованного кода.

Однако, прежде чем выбрать вариант с C#, нужно хорошенько подумать. Ведь расширенные функции C# могут быть просто неактуальными для вас, а синтаксис VB выглядит (во всяком случае для меня) более четким и наглядным. По крайней мере, привычным.

Я уверен, что абсолютное большинство прикладных задач будут решаться с помощью набора функций, которые поддерживаются и в C#, и в VB.NET, поэтому тут главным фактором станет степень владения тем или иным синтаксисом. К тому же вы сможете легко реализовать технологию смешанного программирования, работая на VB.NET и создавая какие-то функции на C# в случае необходимости.

Таким образом, наиболее вероятная последовательность миграции VB-программиста (как индивидуума) выглядит следующим образом:

  1. Изучение VB.NET и подготовка к переходу на него (или: изучение принципов разработки .NET-приложений на примере VB.NET).
  2. Первичное освоение C# на простых примерах — как знакомые VB-программы реализуются в C# (и наоборот — тогда вы сможете легко использовать методические материалы по C# для работы с VB.NET).
  3. Освоение расширенных возможностей C# (отсутствующих в VB.NET) и использование их в проектах в режиме смешанного программирования.
  4. Далее — возможность перехода на C++ или Java.

Миграция VB-программ

В плане разработки новых приложений в среде .NET ситуация довольно прозрачна. Лучше начать с создания прототипов небольших некритичных приложений, но при этом желательно вести такие разработки для широкого круга задач, чтобы изучить технологию с разных сторон.

Но что делать с критичными приложениями? Основная проблема заключается в том, что при переходе с VB 6.0 на VB.NET не сохраняется совместимость кода. В этой связи нужно отметить следующие моменты.

Разрабатывая сегодня приложения на VB 6.0, нужно учитывать будущие проблемы миграции, чтобы минимизировать затраты по преобразованию кода. Именно эти вопросы рассматривались в прошлогоднем цикле статей «А ты готов к VB.NET?».

В состав VB.NET входит мастер Update Wizard, который автоматически преобразует старый VB6-код. Но делает он это не на 100%. А раз так, то любую серьезную программу все равно нужно будет просматривать, анализировать и корректировать вручную. Следует помнить, что далеко не во всех случаях Wizard честно указывает код, который он не смог преобразовать. Очень опасны ситуации, когда мастер завершает работу без видимых проблем, а в действительности проблемы есть. В любом случае все преобразованные приложения придется заново тщательно тестировать.

Update Wizard работает только при загрузке старого VB-проекта целиком. Если же вы захотите подгрузить в .NET-проект отдельный модуль, написанный на VB 6.0, то никакое преобразование вообще не будет выполняться. Аналогично, когда вы простым копированием через буфер обмена вставляете фрагменты исходного текста программ из какого-то хранилища (например, Code Librarian), программа не выполняет никакого контроля и автоматического преобразования, так что вероятность, что один и тот же код будет работать в VB 6.0 и в VB.NET, очень невелика (опять же — вариант, когда он просто не будет работать, не самый плохой).

Для иллюстрации сказанного выше рассмотрим простой пример миграции.

Создайте в VB 6.0 новое приложение типа Standard. На форме установите командную кнопку и напишите для нее такой код:

Обратите внимание — это код всего модуля формы. А теперь загрузите этот проект в VB.NET и посмотрите, что у вас получилось в результате работы Migration Wizard (листинг 1). Блоки Windows Form Designer generated code и Upgrade Support — чисто служебные (правда, непонятно, зачем они вообще появляются в окне кода), но даже если их закрыть, то отличия в новой программе довольно заметны:

Обратите внимание, что по умолчанию VB.NET устанавливает режим Option Strict Off, хотя следовало бы On.

Чтобы показать проблемы, возникающие при автоматическом преобразовании кода, создайте в VB 6.0 приложение, которое состоит из одного BAS-модуля Module1 с простым программным кодом, формирующим список файлов корневого каталога:

Теперь, открыв новый проект в VB.NET, попробуем для начала подключить к нему модуль Module1.bas. Если загрузить модуль «как есть», без преобразования кода, сразу будут видны синтаксические ошибки, проект просто не запустится.

После этого откроем старый VB-проект в VB.NET целиком. Теперь Update Wizard сработает, и мы увидим преобразованный код (листинг 2). Запустим проект. Синтаксических ошибок не обнаружено, но на стадии выполнения будет выдана ошибка An unhandled exception of type ‘System.InvalidCastException’ occurred (неописанное исключение типа). В чем же причина?

Обратите внимание, что строчки VB-кода

в VB.NET приняли такой вид:

Второй массив сохранил свой начальный тип, а первый поменял String на Object (я специально включил описания неиспользуемого массива arrF, чтобы показать это различие). И это при том, что во всех остальных местах Update Wizard правильно отработал использование суффиксов для определения типов данных — в том числе в процедуре FileCount, где описание arrFile$() поменялось на arrFile() As String.

Ошибка же, естественно, происходит из-за несоответствия типов данных. И здесь уже возникают дополнительные вопросы не к мастеру обновления, а к самому пакету VB.NET: почему такое несоответствие фиксируется не на этапе компиляции, а лишь на стадии выполнения, и почему выдается такая путаная диагностика?

Выбор оптимальной стратегии

Итак, перенос VB-программ в VB.NET — совсем не тривиальная задача. А раз так, стоит подумать — есть ли вообще смысл в миграции? По оценкам компании Gartner, лишь 30-40% существующего сегодня VB-кода можно будет перевести на платформу .NET, остальное придется переписывать и перепроектировать.


Таким образом, лучше всего уже сейчас определиться со своими текущими разработками, которые можно разделить на три категории:

  • проекты, жизненный цикл которых будет определяться исключительно привязкой к VB 6.0;
  • разработки, которые сейчас ведутся на VB 6.0 с перспективой перехода на VB.NET;
  • новые приложения, изначально базирующиеся на VB.NET.

В последнюю категорию целесообразнее всего отнести Web-приложения (VB.NET имеет тут явные преимущества перед VB 6.0) и новые серверные приложения. Что касается клиентских приложений, то тут ключевым становится вопрос — перешли ли уже ваши клиенты на исполнительную среду .NET?

Один из наиболее актуальных путей использования старого VB-кода в .NET-приложениях — его преобразование в COM-объекты. Пакет .NET Framework включает специальный механизм COM Interop, который обеспечивает взаимодействие COM- и .NET-компонентов. Это взаимодействие может быть двусторонним — «из .NET в COM» и «из COM в .NET». В первом случае используется специальная оболочка RCW (Runtime Callable Wrapper), представляющая COM-объект как .NET-объект. Во втором случае действует оболочка CCW (COM Callable Wrapper), выполняющая аналогичную трансформацию .NET-объекта (рисунок). В принципе при работе этого механизма не должно возникать никаких проблем, хотя есть и целый ряд интересных нюансов, которые можно рассмотреть в отдельной статье.

Схема работы механизма COM Interop.

Листинг 1. Результат работы Migration Wizard VB.NET

*Здесь я снова настоятельно рекомендую внимательно изучить книгу Дана Эпплмана «Переход на VB.NET: стратегии, концепции, код», вышедшую в издательстве «Питер» в 2002 г.
VB.NET очень серьезно отличается от VB 6.0, его изучение и привыкание к работе с ним потребуют немало усилий. В этой ситуации возникает логичный вопрос — может, стоит сменить язык программирования?

За дополнительной информацией обращайтесь в компанию Interface Ltd.

От VB 6.0 к Visual Studio .NET

Выпустив в ноябре 2000 г. бета-версию Visual Studio .NET, корпорация Microsoft публично показала, как она собирается реализовывать на технологическом уровне свою новую архитектуру .NET, которая до того представлялась на уровне довольно общих концепций. Вполне естественно, что реакция общественности была двойственной — наряду с одобрением имела место и критика.

Особенно бурно новшества .NET обсуждались в сообществе VB-программистов. Представленный вариант VB.NET не оставил сомнений в том, что переход на новую версию VB будет достаточно сложным и болезненным. Впервые за десять лет существования VB нарушилась совместимость программного кода «снизу вверх», что делает автоматический перенос приложений из VB 6.0 в VB.NET по крайней мере очень проблематичным. Кроме того, и это наиболее существенно, изменилась логика и концепции разработки (см. также статью «В ожидании Visual Studio .NET», «BYTE/Россия» № 1/2001).

Казалось бы, в Microsoft VB.NET наконец-то было выполнено давнишнее требование VB-программистов — максимально приблизить их инструмент к возможностям «настоящих» языков программирования, таких, как C/C++, в частности, убрав многочисленные ограничения и реализовав полноценный режим объектно-ориентированного программирования. Но, как это часто бывает в жизни, у медали обнаружилась и оборотная сторона, а достоинствам сопутствовали серьезные недостатки. Прежде всего для освоения обновленного инструмента требуются немалые усилия. Проблема усугубляется еще и тем, что огромная (насчитывающая по разным оценкам от 2 до 4 млн) армия VB-программистов очень неоднородна по квалификации и характеру решаемых задач. Именно это обусловило раскол VB-сообщества на две части по отношению к новому инструменту. Сторонники VB.NET подчеркивают, что новый VB дает возможность создавать приложения масштаба предприятия, в том числе Web- и серверные приложения. Противники говорили о серьезной угрозе стабильности огромной базы существующего VB-кода и значительных затратах на переобучение программистов.

Участники дискуссии руководствовались чисто практическими интересами — все понимали, что реализация новшеств VB.NET может серьезно повлиять на их личную судьбу. Ведь переход от нынешней архитектуры Windows к будущей .NET может оказаться таким же болезненным, как и переход от DOS к Windows в начале 1990-х.

Появление в июне 2001 года Visual Studio .NET Beta 2 подвело черту под жаркими дискуссиями — стало очевидно, что Microsoft не собирается идти на сколько-нибудь радикальные уступки в ответ на критику нововведений VB.NET (правда, и раньше иллюзии по этому поводу были только у людей, слабо знакомых с бизнес-стратегией детища Билла Гейтса). Именно тогда VB-разработчики должны были всерьез задуматься над вопросом — как жить дальше?

В поисках ответа на этот вопрос мы в прошлом году опубликовали цикл статьей «А ты готов к VB.NET? Советы тем, кто собирается работать с новой версий VB» («BYTE/Россия» № 3, 6 и 8/2001). Сейчас, спустя год, мы подводим итог этого обсуждения, причем в новых исторических условиях — VB 6.0 больше не продается и не поддерживается, на смену ему пришел.

Поспешай не торопясь

Сформулируем основной принцип миграции: она должна выполняться постепенно, без спешки и суеты, но в то же время достаточно уверенно — важно не упустить время. Повторим еще раз: переход от Windows к .NET произойдет совсем не мгновенно, скорее всего, переломный момент наступит через пару лет (об этом говорят простой ретроспективный анализ и здравый смысл, такие же оценки дают и ведущие аналитические агентства). Сейчас архитектура .NET проходит фактически стадию опытной эксплуатации, по итогам которой ее концепция и конкретные решения могут быть подвергнуты определенной коррекции. Об устоявшемся ее варианте можно будет говорить после появления версии .NET Framework 2.0 (а еще лучше — 3.0).

Последовательность перехода на новые инструменты для разных категорий разработчиков обычно выглядит следующим образом.

На этапе бета-тестирования сам поставщик технологии и его ближайшие партнеры выпускают образцово-показательные приложения в маркетинговых целях. Различные независимые эксперты (в том числе журналисты и писатели) стараются успеть выдать «горячую» информацию. Многочисленные любители спешат поиграть с новыми «штучками», особенно если у них есть свободное время. Разработчики дополнительного инструментария для программистов включаются в игру — нужно опередить конкурентов.

После выхода официальной версии в дело вступают разработчики «тяжелых» решений для корпоративного сектора, но плоды их реальной работы появятся лишь спустя пару лет. Спустя еще год-два подключаются разработчики, создающие внутрифирменные корпоративные решения. Еще позднее появляются заказные решения, выполняемые для (или внутри) малых и средних предприятий.

С учетом всего сказанного можно дать два предварительных совета. Во-первых, не спешите удалять свою нынешнюю версию VB. Скорее всего, она понадобится для поддержки значительной части имеющихся у вас программ до окончания их жизненного цикла. Хотя VB.NET имеет рабочий номер версии 7.0, но было бы правильнее назвать пакет VB.NET 1.0. Для VB-программистов миграция на .NET будет более сложной, чем переход от 16-разрядных версий Windows к 32-разрядным, не говоря уже о замене VB 5.0 на VB 6.0. Масштаб изменений более сравним с переходом с DOS Basic на Visual Basic, но сейчас переходный период сократится до 2-3 лет.

Во-вторых, не откладывайте надолго расставание со «старым добрым» VB. Помните о временах 10-летней давности, когда нежелание переходить от функционально более мощного Basic PDS 7.1 к «примитивному» и непривычному VB 1.0 обернулось необходимостью менять профессию для достаточно опытных программистов. Не должно быть никаких иллюзий по поводу того, что Microsoft будет хотя бы какое-то время продолжать поддержку VB 6.0 (его продажи прекратились 1 июня). Соответственно, начинать на нем разработку новых серьезных приложений вряд ли имеет смысл. А вот маленьких. Наверное, на них как раз удобнее осваивать новые системы.

Куда бедному VB-программисту деваться?

Имеется несколько ответов на этот вопрос. Самый радикальный вариант — сменить профессию (как это сделали многие программисты во времена перехода от DOS к Windows и еще раньше — от ЕС ЭВМ к ПК). Если же вы не собираетесь этого делать, разработайте четкую стратегию развития — для самого себя и для своих продуктов. Лучше было бы заняться этим еще года полтора назад, но и сейчас еще не поздно*.

*Здесь я снова настоятельно рекомендую внимательно изучить книгу Дана Эпплмана «Переход на VB.NET: стратегии, концепции, код», вышедшую в издательстве «Питер» в 2002 г.

VB.NET очень серьезно отличается от VB 6.0, его изучение и привыкание к работе с ним потребуют немало усилий. В этой ситуации возникает логичный вопрос — может, стоит сменить язык программирования?

Однако нужно иметь в виду, что речь на самом деле идет не о том, на каком языке писать программы, а о том, на какой операционной платформе вы собираетесь работать. Если вы не хотите иметь дело с .NET и обладаете нужной квалификацией, стоит подумать о переходе на C++. С его помощью вы сможете создавать производительные решения, используя традиционные методы разработки программ (работа с объектными модулями, а не только с объектными библиотеками), не ограничивая себя «управляемым» кодом и обеспечивая себе возможность «межплатформенной» миграции, например, в сторону Java.

Но если говорить о создании программ не системного, а прикладного уровня, то выбор нужно делать между .NET и Java 2 Platform (ранее уже отмечалось, что сравнение отдельных языков, например, C# и Java, некорректно, так как они представляют собой неотъемлемые компоненты соответствующих платформ, и сравнивать нужно платформы в целом). Стратегия выбора, наверное, не должна определяться конкретными технологическими деталями. В данном случае важно, хотите вы иметь дело с платформенными технологиями от одного поставщика или от сообщества поставщиков. И тот и другой вариант имеет свои плюсы и минусы.

Если вы решили делать ставку на Microsoft .NET, то реален также переход с VB 6.0 на C#, который обладает более гибкими возможностями по сравнению с VB.NET. Думаю, Microsoft сознательно сохранила определенные функциональные различия между VB.NET и C#, руководствуясь в основном маркетинговыми соображениями типа «разделяй и властвуй». Впрочем, нужно также отметить, что C# создавался «с чистого листа» специально под .NET, а при модернизации VB.NET корпорация все же была вынуждена учитывать проблему унаследованного кода.

Однако, прежде чем выбрать вариант с C#, нужно хорошенько подумать. Ведь расширенные функции C# могут быть просто неактуальными для вас, а синтаксис VB выглядит (во всяком случае для меня) более четким и наглядным. По крайней мере, привычным.

Я уверен, что абсолютное большинство прикладных задач будут решаться с помощью набора функций, которые поддерживаются и в C#, и в VB.NET, поэтому тут главным фактором станет степень владения тем или иным синтаксисом. К тому же вы сможете легко реализовать технологию смешанного программирования, работая на VB.NET и создавая какие-то функции на C# в случае необходимости.

Таким образом, наиболее вероятная последовательность миграции VB-программиста (как индивидуума) выглядит следующим образом:

  1. Изучение VB.NET и подготовка к переходу на него (или: изучение принципов разработки .NET-приложений на примере VB.NET).
  2. Первичное освоение C# на простых примерах — как знакомые VB-программы реализуются в C# (и наоборот — тогда вы сможете легко использовать методические материалы по C# для работы с VB.NET).
  3. Освоение расширенных возможностей C# (отсутствующих в VB.NET) и использование их в проектах в режиме смешанного программирования.
  4. Далее — возможность перехода на C++ или Java.

Миграция VB-программ

В плане разработки новых приложений в среде .NET ситуация довольно прозрачна. Лучше начать с создания прототипов небольших некритичных приложений, но при этом желательно вести такие разработки для широкого круга задач, чтобы изучить технологию с разных сторон.

Но что делать с критичными приложениями? Основная проблема заключается в том, что при переходе с VB 6.0 на VB.NET не сохраняется совместимость кода. В этой связи нужно отметить следующие моменты.

Разрабатывая сегодня приложения на VB 6.0, нужно учитывать будущие проблемы миграции, чтобы минимизировать затраты по преобразованию кода. Именно эти вопросы рассматривались в прошлогоднем цикле статей «А ты готов к VB.NET?».

В состав VB.NET входит мастер Update Wizard, который автоматически преобразует старый VB6-код. Но делает он это не на 100%. А раз так, то любую серьезную программу все равно нужно будет просматривать, анализировать и корректировать вручную. Следует помнить, что далеко не во всех случаях Wizard честно указывает код, который он не смог преобразовать. Очень опасны ситуации, когда мастер завершает работу без видимых проблем, а в действительности проблемы есть. В любом случае все преобразованные приложения придется заново тщательно тестировать.

Update Wizard работает только при загрузке старого VB-проекта целиком. Если же вы захотите подгрузить в .NET-проект отдельный модуль, написанный на VB 6.0, то никакое преобразование вообще не будет выполняться. Аналогично, когда вы простым копированием через буфер обмена вставляете фрагменты исходного текста программ из какого-то хранилища (например, Code Librarian), программа не выполняет никакого контроля и автоматического преобразования, так что вероятность, что один и тот же код будет работать в VB 6.0 и в VB.NET, очень невелика (опять же — вариант, когда он просто не будет работать, не самый плохой).

Для иллюстрации сказанного выше рассмотрим простой пример миграции.


Создайте в VB 6.0 новое приложение типа Standard. На форме установите командную кнопку и напишите для нее такой код:

Обратите внимание — это код всего модуля формы. А теперь загрузите этот проект в VB.NET и посмотрите, что у вас получилось в результате работы Migration Wizard (листинг 1). Блоки Windows Form Designer generated code и Upgrade Support — чисто служебные (правда, непонятно, зачем они вообще появляются в окне кода), но даже если их закрыть, то отличия в новой программе довольно заметны:

Обратите внимание, что по умолчанию VB.NET устанавливает режим Option Strict Off, хотя следовало бы On.

Чтобы показать проблемы, возникающие при автоматическом преобразовании кода, создайте в VB 6.0 приложение, которое состоит из одного BAS-модуля Module1 с простым программным кодом, формирующим список файлов корневого каталога:

Теперь, открыв новый проект в VB.NET, попробуем для начала подключить к нему модуль Module1.bas. Если загрузить модуль «как есть», без преобразования кода, сразу будут видны синтаксические ошибки, проект просто не запустится.

После этого откроем старый VB-проект в VB.NET целиком. Теперь Update Wizard сработает, и мы увидим преобразованный код (листинг 2). Запустим проект. Синтаксических ошибок не обнаружено, но на стадии выполнения будет выдана ошибка An unhandled exception of type ‘System.InvalidCastException’ occurred (неописанное исключение типа). В чем же причина?

Обратите внимание, что строчки VB-кода

в VB.NET приняли такой вид:

Второй массив сохранил свой начальный тип, а первый поменял String на Object (я специально включил описания неиспользуемого массива arrF, чтобы показать это различие). И это при том, что во всех остальных местах Update Wizard правильно отработал использование суффиксов для определения типов данных — в том числе в процедуре FileCount, где описание arrFile$() поменялось на arrFile() As String.

Ошибка же, естественно, происходит из-за несоответствия типов данных. И здесь уже возникают дополнительные вопросы не к мастеру обновления, а к самому пакету VB.NET: почему такое несоответствие фиксируется не на этапе компиляции, а лишь на стадии выполнения, и почему выдается такая путаная диагностика?

Выбор оптимальной стратегии

Итак, перенос VB-программ в VB.NET — совсем не тривиальная задача. А раз так, стоит подумать — есть ли вообще смысл в миграции? По оценкам компании Gartner, лишь 30-40% существующего сегодня VB-кода можно будет перевести на платформу .NET, остальное придется переписывать и перепроектировать.

Таким образом, лучше всего уже сейчас определиться со своими текущими разработками, которые можно разделить на три категории:

  • проекты, жизненный цикл которых будет определяться исключительно привязкой к VB 6.0;
  • разработки, которые сейчас ведутся на VB 6.0 с перспективой перехода на VB.NET;
  • новые приложения, изначально базирующиеся на VB.NET.

В последнюю категорию целесообразнее всего отнести Web-приложения (VB.NET имеет тут явные преимущества перед VB 6.0) и новые серверные приложения. Что касается клиентских приложений, то тут ключевым становится вопрос — перешли ли уже ваши клиенты на исполнительную среду .NET?

Один из наиболее актуальных путей использования старого VB-кода в .NET-приложениях — его преобразование в COM-объекты. Пакет .NET Framework включает специальный механизм COM Interop, который обеспечивает взаимодействие COM- и .NET-компонентов. Это взаимодействие может быть двусторонним — «из .NET в COM» и «из COM в .NET». В первом случае используется специальная оболочка RCW (Runtime Callable Wrapper), представляющая COM-объект как .NET-объект. Во втором случае действует оболочка CCW (COM Callable Wrapper), выполняющая аналогичную трансформацию .NET-объекта (рисунок). В принципе при работе этого механизма не должно возникать никаких проблем, хотя есть и целый ряд интересных нюансов, которые можно рассмотреть в отдельной статье.

Схема работы механизма COM Interop.

Листинг 1. Результат работы Migration Wizard VB.NET

Другие статьи из раздела

  • Инструменты разработки Oracle для процессорных ускорителей
  • Платформа совместной разработки приложений от HP
  • Приложения для всех платформ – с единым кодом
  • Intel Parallel Composer – отладка параллельных программ
  • Intel Parallel Inspector – поиск ошибок многопоточности

Поместить в блог

Комментарии к статье

Ссылка на статью: От VB 6.0 к Visual Studio .NET

s.up.e.rvi.sor.2.01.5.i.n.v.i.no@gmail.com
s.up.er.vi.s.o.r2.015.i.nvi.no@gmail.com
s.up.e.rvis.or2.0.15.i.nv.i.n.o@gmail.com
sup.e.rvisor.20.15.i.n.v.i.no@gmail.com
su.per.v.i.so.r2015i.n.vin.o@gmail.com

Создано: 01.11.2020 01:36:02
Автор: Helenawkr

s.uper.visor2.0.1.5in.vi.n.o@gmail.com
s.upervi.s.o.r.2015.i.n.v.ino@gmail.com
supe.rv.iso.r.20.1.5.i.n.v.i.n.o@gmail.com
su.pervis.o.r201.5i.nv.i.no@gmail.com
s.u.perv.i.sor.2.015in.vino@gmail.com

Создано: 02.11.2020 13:02:09
Автор: Helenayfj

Рекламные ссылки

Chloride
Демонстрация Chloride Trinergy
Впервые в России компания Chloride Rus провела демонстрацию системы бесперебойного электропитания Chloride Trinergy®, а также ИБП Chloride 80-NET™, NXC и NX для своих партнеров и заказчиков.

NEC Нева Коммуникационные Системы
Завершена реорганизация двух дочерних предприятий NEC Corporation в России
С 1 декабря 2010 года Генеральным директором ЗАО «NEC Нева Коммуникационные Системы» назначен Раймонд Армес, занимавший ранее пост Президента Shyam …

компания «Гротек»
С 17 по 19 ноября 2010 в Москве, в КВЦ «Сокольники», состоялась VII Международная выставка InfoSecurity Russia. StorageExpo. Documation’2010.
Новейшие решения защиты информации, хранения данных и документооборота и защиты персональных данных представили 104 организации. 4 019 руководителей …

МФУ Panasonic DP-MB545RU с возможностью печати в формате А3
Хотите повысить эффективность работы в офисе? Вам поможет новое МФУ #Panasonic DP-MB545RU. Устройство осуществляет

Adaptec by PMC
RAID-контроллеры Adaptec Series 5Z с безбатарейной защитой кэша
Опытные сетевые администраторы знают, что задействование в работе кэш-памяти RAID-контроллера дает серьезные преимущества в производительности …

Chloride
Трехфазный ИБП Chloride от 200 до 1200 кВт: Trinergy
Trinergy — новое решение на рынке ИБП, впервые с динамическим режимом работы, масштабируемостью до 9.6 МВт и КПД до 99%. Уникальное сочетание …

Приложение А. Перенос программ Visual Basic 6 в Visual Basic .NET 2003

Запуск Visual Basic Upgrade Wizard (Мастер переноса Visual Basic)

Visual Studio . NET включает специальную программу, которая называется Visual Basic Upgrade Wizard (Мастер переноса Visual Basic ), которая поможет вам при переносе ваших приложений Visual Basic 6 в Visual Basic . NET . Visual Basic Upgrade Wizard (Мастер переноса Visual Basic ) не является универсальным решением проблемы переноса приложений Visual Basic 6 — этот инструмент может обработать только наиболее часто повторяющиеся изменения кода и заменить в форме элементы управления Visual Basic 6 на элементы управления Visual Basic . NET . Во всех приложениях, кроме самых простых, по окончании работы мастера вам все-таки придется некоторое количество кода править вручную.

Visual Basic Upgrade Wizard (Мастер переноса Visual Basic ) запускается автоматически, когда вы пытаетесь загрузить в Visual Studio . NET приложение Visual Basic 6. Он создает новый проект Visual Basic . NET для оригинального приложения, а затем переносит столько кода, сколько возможно. Когда мастер не может перенести какую-либо функцию, он добавляет в код программы комментарий, указывающий на то, что в дальнейшем вы должны самостоятельно рассмотреть этот код. Также мастер создает отчет переноса, содержащий перечень всех затруднений и проблем, которые он не смог разрешить. В следующем упражнении демонстрируется, как работает Visual Basic Upgrade Wizard (Мастер переноса Visual Basic ). В этом примере я открываю и обновляю проект Visual Basic 6 с именем Alarm .vbp, который используется для создания персонального «напоминателя» о назначенных событиях. Для этого используется элемент управления Timer , элементы управления TextBox и элементы управления Button . Так как эта программа не использует функций, которые не поддерживаются в Visual Basic . NET , перенос достаточно прост. В Visual Basic 6 проект Alarm выглядит следующим образом.

Перенос программы Alarm

Запустите Visual Studio .NET 2003 и откройте проект Alarm.vbp, находящийся в папке c:\vbnet03sbs\appa\alarmvb6. Visual Studio распознает Alarm.vbp как проект Visual Basic 6 и запустит Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) для переноса этого проекта в Visual Basic .NET. Откроется такое диалоговое окно.

Как сказано в этом диалоговом окне, Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) помогает процессу переноса, создавая новый проект Visual Basic .NET для приложения Visual Basic 6, копируя в новый проект файлы форм и классов и преобразуя их в новый формат, и создавая отчет обновления, который указывает на то, какая работа была выполнена, и какую работу необходимо выполнить вручную. Отчет о переносе добавляется в проект Visual Basic .NET, так что его легко найти и прочитать.

Щелкните на Next (Далее), чтобы запустить преобразование. Мастер задаст несколько вопросов относительно формата вашего проекта и содержимого его компонент. Ваш экран будет выглядеть аналогично показанному на следующей иллюстрации.

В этом примере для приложения Alarm был выбран формат по умолчанию EXE, так как это приложение инструмента, а не DLL (динамической библиотеки).


Чтобы продолжить процесс переноса, щелкните на Next (Далее). Мастер запросит у вас расположение нового проекта Visual Basic .NET. Папкой по умолчанию является подпапка в папке вашего оригинального проекта, как показано в этом диалоговом окне.

Чтобы начать собственно процесс переноса, щелкните на Next (Далее). Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) вызовет механизм обновления и пройдется по форме и коду проекта Alarm, чтобы преобразовать элементы управления в элементы управления .NET, обновить код программы, сделать его совместимым со спецификациями Visual Basic .NET и создать отчет обновления. Отчет обновления сохраняется в формате HTML и называется _UpgradeReport.htm. Через несколько минут мастер закроется, и в среде разработки Visual Studio появится новый проект Visual Basic .NET. Содержимое этого нового проекта перечислено в Solution Explorer (Обозревателе решений).

Если форма проекта не отображается, щелкните в Solution Explorer (Обозревателе решений) на Alarm.vbp, а затем щелкните на кнопке View Designer (Просмотреть конструктор). Ваш экран будет выглядеть примерно так.

Если вы сравните этот рисунок с первым рисунком этого приложения (проект Alarm, загруженный в Visual Basic 6), то поймете некоторые характеристики Visual Basic Upgrade Wizard (Мастер переноса Visual Basic). Во-первых, хотя мастер аккуратно задал размеры формы и ее объектов, шрифты, использованные в них, не соответствуют требованиям и для корректного отображения интерфейса пользователя должны быть настроены в Visual Studio .NET. Во-вторых, элементы управления Visual Basic 6 были обновлены на элементы управления .NET. Элементы управления Label и TextBox были обновлены на их эквиваленты для .NET. Элементы управления CommandButton стали элементами управления Button , хотя они по прежнему содержат в имени слово Command. Элемент управления Image , показывающий часы, был изменен на элемент управления .NET PictureBox . Visual Studio .NET не содержит элемента управления Image , и теперь графические файлы отображаются с помощью элемента управления PictureBox . Элемент управления Timer был обновлен до своей версии .NET и теперь отображается в области компонент. Наконец, мастер добавил в область компонент, расположенную под формой, элемент управления ToolTip . В Visual Basic 6 многие элементы управления имеют свойство ToolTipText , предназначенное для отображения подсказок для этих элементов управления. Visual Studio .NET содержит другой механизм отображения подсказок и использует для управления всеми подсказками для всех элементов управления формы единственный элемент управления ToolTip . Так как многие элементы управления Visual Basic 6 имеют свойство ToolTipText , даже если оно было пустым, Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) по умолчанию добавляет этот элемент управления при переносе проектов Visual Basic 6.

Если необходимо, закройте Toolbox (Область элементов), чтобы освободить место на экране, а затем откройте разделы Global Issues (Общие вопросы) и Alarm.vb, сделав щелчок на знаках «плюс» (+) рядом с ними, и прочтите подробный отчет. Ваш экран будет выглядеть примерно так, как показано на рисунке вверху следующей страницы.

Отчет об обновлении описывает многие вопросы переноса. Например, не было перенесено свойство PaletteMode формы, и оказалось невозможно разрешить свойство по умолчанию объекта Timer1 . Если вы щелкните на гиперссылках Description (Описание), то будет выведена дополнительная документация по данной теме.

Чтобы отобразить в Code Editor (Редакторе кода) код Alarm, щелкните в Solution Explorer (Обозревателе решений) на Alarm.vb, а затем на кнопке View Code (Просмотреть код). В верхней части Code Editor (Редактора кода) вы увидите свернутый раздел Upgrade Support (Поддержка переноса). Этот раздел включает код, предназначенный для обеспечения совместимости с Visual Basic 6. При просмотре кода программы вы увидите комментарии, которые указывают на потенциальные проблемы, как показано здесь.

Эти комментарии к обновлению описывают проблемы и обычно содержат гиперссылку на дополнительную документацию, которую можно просмотреть, если прокрутить Редактор кода вправо. Например:

Признавая, что некоторые проблемы переноса могут поставить в тупик, Microsoft разработала Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) так, что он вставляет гиперссылки, указывающие на дополнительную информацию.

Запуск обновленной программы Alarm

  1. Щелкните на кнопке Start (Начать) стандартной панели инструментов. Появится диалоговое окно Save File As (Сохранить файл как), спрашивающее местоположение и имя файла решения Alarm.
  2. Чтобы принять имя по умолчанию Alarm.sln и расположение в папке AlarmVB.NET, щелкните на Save (Сохранить). Появится форма Персональный будильник! Хотя обновление привело к появлению предупреждений, оно не привело к появлению ошибок, которые требуют модификации кода.
  3. Введите в текстовое поле Время время, которое находится на пару минут больше текущего. Укажите время в 24-часовом формате, где 8:00 a.m. указывается как 08:00, а 1:00 p.m. указывается как 13:00.

Введите в текстовое поле Сообщение короткое сообщение, такое, как Обновлено для Visual Basic .NET!, а затем щелкните на кнопке Установить. Подождите, пока наступит указанное вами время, и вы увидите, как появится ваше сообщение. Оно будет выглядеть примерно так.

В этом простом случае проект Visual Basic 6 был обновлен и не потребовал для своего запуска модификаций. Однако большинство переносов потребует для безошибочных компиляции и запуска некоторого изменения кода. Вам также обычно будет требоваться произвести небольшие изменения интерфейса пользователя и выполнить тщательное тестирование, чтобы убедиться, что программа работает точно так же, как она работала в Visual Basic 6. С моей точки зрения, преимущества от переноса большинства проектов с помощью Visual Basic Upgrade Wizard (Мастер переноса Visual Basic) перевешивают потенциальные недостатки, но вы должны самостоятельно оценить эти преимущества и недостатки для каждого из ваших проектов. Удачи!

Преобразование ваших проектов из vb6 в vb net

1056 просмотра

1 ответ

477 Репутация автора

Мы осуществляем отправку данных на основе протокола на устройство, где устройству требуются отформатированные пакеты данных.

образец пакета данных XXFSXXXFSXXXXXXXFSXXXXXX . X Упомянуто это максимальный размер длина каждой строки. если данные меньше максимальной длины строки, они должны быть заполнены символом NULL ..11FS123FS1234XXXX (оставшиеся X будут заполнены NULL).

Я просто пытаюсь преобразовать одну из функций VB6 в VB.Net, и ниже приведен преобразованный оператор, где я сталкиваюсь с проблемой

при объединении строк мне нужна строка фиксированной длины, например:

вывод: так как четыре — это строка фиксированной длины из 8 длин, оставшиеся 4 символа должны быть заполнены нулем, как показано ниже

Ответы (1)

6 плюса

401262 Репутация автора

Строки фиксированной длины просто не имеют смысла в .NET. Microsoft пыталась предоставить аналогичный класс для более простого обновления, но правда в том, что вы должны изменить свой код в зависимости от использования:

Что сделала строка фиксированной длины в вашем коде VB6? Это было без уважительной причины? Тогда используйте нормальный String в .NET.

Это было для взаимодействия с C API? Затем используйте marshalling, чтобы установить размер для массива в вызове C API.

Преобразование ваших проектов из vb6 в vb net

Итак, как вы выше увидели, каждый тип данных характеризуется определенным количеством байт, которое этот тип занимает в памяти. При этом для нас вполне логичным было бы написать что-то вроде:

В то же время эта запись не совсем эквивалентна следующей, хотя результат один и тот же:

Все дело в том, что в первом случае компилятор применяет преобразование типов: он преобразует данные типа Byte в данные типа Integer. Данный тип преобразований называется расширяющим (widening), так как тип Byte расширяет свой размер до размера типа Integer.

Кроме расширяющих преобразований есть еще и сужающие:

В этом случае переменные num1 и num2 типа Integer сужались до типа Byte. Однако с сужающими преобразованиями, особенно с теми, которые выполняются неявно, как в нашем случае, надо обращаться осторожно. Так, следующий код выбросит исключение OverflowException:

Что в принципе не удивительно, так как итоговое число — 300 больше максимального числа, которое может представлять тип Byte, то есть больше 255.

Другой момент, который надо затронуть, — это явные (explicit conversion) и неявные (implicit conversion) преобразования . Все выше перечисленные преобразования выполнялись у нас неявно. То есть компилятор сам выполнял преобразование из типа Integer в тип Byte без дополнительных команд. Мы можем явно запретить неявные сужающие преобразования, установив в самом верху кода программы оператор Option Strict On. Кроме того, мы можем установить этот оператор применительно ко всему проекту через свойства проекта (в меню выберите пункт Проект(Project) и в появившемся меню выберите пункт Свойства (Properties)):

После установки для данного оператора значения On строчка Dim res As Byte = num1 + num2 будет рассматриваться как ошибочная. В этом случае мы должны будем явно преобразовывать типы с помощью соответствующих методов:

В данном случае метод CInt преобразует вводимую строку в число типа Integer, а метод CByte преобразует число из типа Integer в тип Byte. В языке VB.NET применяются следующие методы для преобразований типов:


Метод CBool преобразует в тип Boolean любой числовой тип (включая Byte, SByte и типы перечисления), а также String, Object

Метод CByte преобразует в Byte любой числовой тип (включая SByte и типы перечисления), а также Boolean, String, Object

Метод CChar преобразует в Char объекты String, Object

Метод CDate преобразует в Date объекты String, Object

Метод CDbl преобразует в Double любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CDec преобразует в Decimal любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CInt преобразует в Integer любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CLng преобразует в Long любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CObj преобразует в Object любой тип данных

Метод CSByte преобразует в SByte любой числовой тип (включая Byte и типы перечисления), а также Boolean, String, Object

Метод CShort преобразует в Short любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CSng преобразует в Single любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CStr преобразует в String любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, Char, массив Char, Date, Object

Метод CUInt преобразует в UInteger любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CULng преобразует в ULong любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Метод CUShort преобразует в UShort любой числовой тип (включая Byte, SByte и типы перечисления), а также Boolean, String, Object

Кроме того, для преобразования типов мы можем использовать функцию CType . Она принимает два параметра: первый параметр представляет переменную, которую надо преобразовать, а второй параметр — тип данных, в который надо эту переменную преобразовать. В следующем коде мы приводим переменную num3 к типу Byte:

VB6 для преобразования VB.net

может ли один пожалуйста, сообщите инструмент, который преобразует vb6 в vb.net

Существует один, который поставляется с vb.net. При открытии проекта .vbp VB6, он спрашивает, если вы хотите автоматически преобразовать его в vb.net. Это делает очень хорошую работу, за исключением сторонних дополнений.

Microsoft Corp просто опубликовала всемирное исследование случая на основе успешного VB6 проекта миграции:

Вы также можете попробовать Basic Companion визуального обновления.
Он генерирует VB .NET и C# и карты COM компонентов для рамочных компонентов.

Это, конечно, не тривиальный вопрос.

DotNetRocks недавно сделал шоу на это, которое вы найдете здесь — Francesco балена на VB .NET для миграции — http://www.dotnetrocks.com/default.aspx?showNum=491

Это позволит познакомить вас с некоторыми из проблем, и в самом деле, это инструмент, чтобы сделать преобразование.

Я считаю, что Visual Studio имеет встроенный в VB6 -> VB .NET проект и компонент преобразования источника, построенный в я не использовал его на некоторое время, в последний раз, когда я сделал преобразование было с Visual Studio 2005. Это было немного. сложно, и есть еще некоторые ручная очистка участие, чтобы все работало правильно. Я не знаю, что система VS2008 нравится.

vb.net — Преобразование проекта из vb6 в vb.net Visual Studio 2008

Я хочу преобразовать свой старый проект vb6 в решение vb.Net, когда я открою do: File->Open->Convert это то, что я получаю:

И я не могу найти способ показать доступные конвертеры.

  • Установка Framework 1.0, так как я где-то читал, что он нужен
  • Попробовал установить фреймворк 2.0, но он говорит «У меня есть», но он не отображается в списке программ удаления
  • Пробовал установить фреймворк 3.0, как и раньше.
  • Я даже пытаюсь добавить Microsoft.VisualBasic.UpgradeWizard.dll через regasm но я не могу открыть консольную команду в VS2008, только в VS2010, и я прочитал, что VS2010 не может обрабатывать преобразование с vb6 на vb.net, это должен пройти сначала VS2008.
    4 2
  • 16 апр 2020 2020-04-16 13:02:36
  • Luis

2 ответа

Не знаю, для чего нужен диалоговое окно Convert — в нем ничего нет.

Согласно этому Форуму сообщения, вы можете открыть ВБП в Visual Studio, и он должен просить, чтобы преобразовать проект (без опции, чтобы открыть файл.vbp в VS 2010). Однако, даже если это все еще произошло в VS 2010, это очень плохая идея.

См. Также этот пост при конвертации VB6 в VB.NET.

Кроме того, проверьте эти дублированные вопросы SO:

Изменение: в соответствии с этой страницей MSDN мастер преобразования работает только с Visual Studio 2005

Редактировать редактирование: по комментарию MarkJ, Visual Studio 2008 включает мастер обновления. Это прошло в VS 2010.

  • 16 апр 2020 2020-04-16 13:02:37
  • C-Pound Guru

Ну, решение заключалось в установке Visual Studio 2005, тогда были доступны конвертеры:

Полагаю, мне нужна Framework 1.0.

Это не идеально, у него есть некоторые ошибки, но это шаг вперед для полного решения.

Конечно, я нашел некоторые другие сторонние программы конверсии, но они дороги:

Илон Маск рекомендует:  Теги для таблиц
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL