将VB6模块转换为VB.NET

时间:2011-12-02 04:31:43

标签: vb.net vb6 vb6-migration

我差不多已经完成了将模块从VB6转换为VB.NET,但是我遇到了以下2个引号的问题,我想知道是否有任何方法可以解决这个问题:

Structure AUDINPUTARRAY
    bytes(5000) As Byte
End Structure

我正在尝试将该字节行更改为:Dim bytes(5000)as Byte 但它不允许我在结构中定义大小。


这是第二个:

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

我不知道如何转换:msg As String * 200

3 个答案:

答案 0 :(得分:4)

你不能在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 Class属性,否则不能将字符串声明为具有固定长度。上例中的代码会导致错误。

声明一个没有长度的字符串。当您的代码为字符串赋值时,值的长度决定了字符串的长度 见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 :(得分:1)

您可以通过属性

执行此操作
Public Structure <StructLayout(LayoutKind.Sequential)> AUDINPUTARRAY
   Public <MarshalAs(UnmanagedType.ByValArray, SizeConst := 5000)> 
     Bytes() As Byte
End Structure

答案 2 :(得分:0)

我建议,在将代码从VB6重构为.net时,您需要再次查看是否要模拟固定长度msg As String * 200。如果你指望固定长度的字符串,以便你可以从最后删除字符,并且仍然有200个字符的记录,那就是混乱的代码,这取决于函数的副作用。

当我们从VB6转换(一个仍在进行的过程)时,如果我们将字符串显式设置为一个200字节的空间块,它会使代码的意图更清晰。也许通过宣布:

String msg = String(' ', 200)

(如果这在VB.net和C#中都有效)。