Преобразование модуля VB6 в VB.NET - PullRequest
5 голосов
/ 02 декабря 2011

Я почти закончил преобразование модуля из VB6 в VB.NET, но у меня возникли проблемы со следующими двумя цитатами, и мне интересно, есть ли способ сделать это:

Structure AUDINPUTARRAY
    bytes(5000) As Byte
End Structure

Я пытаюсь изменить эту строку байтов на: Dim bytes (5000) as Byte Byte но это не позволяет мне определять размер в структуре.


Вот второй:

Private i As Integer, j As Integer, msg As String * 200, hWaveIn As integer

Понятия не имею, как конвертировать: msg As String * 200

Ответы [ 3 ]

4 голосов
/ 02 декабря 2011

вы не можете объявить начальный размер в VB.Net, вы можете установить его размер позже, используя инструкцию Redim в конструкторе или там, где это необходимо

Structure AUDINPUTARRAY
    Public bytes() As Byte
    Public Sub New(ByVal size As Integer)
        ReDim bytes(size) ' set size=5000

    End Sub


End Structure

В Visual Basic .NET вы не можете объявить строку фиксированной длины, если в объявлении не используется атрибут класса VBFixedStringAttribute. Код в предыдущем примере вызывает ошибку.

Вы объявляете строку без длины. Когда ваш код присваивает значение строке, длина значения определяет длину строки см http://msdn.microsoft.com/en-us/library/f47b0zy4%28v=vs.71%29.aspx , поэтому ваше заявление станет

    Private i As Integer, j As Integer, hWaveIn As Integer
    <VBFixedString(200)> Private msg As String
1 голос
/ 28 декабря 2011

Вы можете сделать это через атрибуты

Public Structure <StructLayout(LayoutKind.Sequential)> AUDINPUTARRAY
   Public <MarshalAs(UnmanagedType.ByValArray, SizeConst := 5000)> 
     Bytes() As Byte
End Structure
0 голосов
/ 11 октября 2013

Я бы предложил, чтобы при рефакторинге вашего кода из VB6 в .net вы еще раз взглянули на то, хотите ли вы даже эмулировать фиксированную длину msg As String * 200.Если вы рассчитывали на строку фиксированной длины, чтобы вы могли обрезать символы с конца, и при этом у вас все еще есть запись из 200 символов, это грязный код, который зависит от побочных эффектов функции.

Когда мы преобразовалиНачиная с VB6 (все еще продолжающийся процесс), смысл кода стал более понятным, если мы явно установим строку в 200-байтовый блок пробелов.Возможно, объявив:

String msg = String(' ', 200)

(если это действительно как в VB.net, так и в C #).

...