将VB6模块转换为VB.NET

5

我快要把一个模块从VB6转换到VB.NET了,但是下面这两个引号让我很困惑,不知道有没有什么方法解决:

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个回答

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类属性,否则无法声明字符串具有固定长度。前面示例中的代码会导致错误。
您声明一个没有长度的字符串。当您的代码为该字符串赋值时,该值的长度决定了该字符串的长度。请参见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

哇,谢谢,我之前不知道 ReDim 或 VBFixedStringAttribute。 - user1060582
1
“Public Sub AUDINPUTARRAY()” 不是构造函数。构造函数是 “Public Sub New()”,但是结构体不能有无参数的构造函数。 - GSerg
抱歉,这是我的错误,我混淆了C#语法,我道歉。 - Akshita

1

你可以通过属性来实现这个功能

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

0

我建议,在将您的代码从VB6重构为.net时,您再次审视一下是否需要模拟固定长度的msg As String * 200。如果您指望固定长度字符串可以从末尾截取字符,并仍然具有200个字符的记录,则这是依赖于函数副作用的混乱代码。

当我们从VB6转换(仍在进行中)时,如果我们明确将字符串设置为200字节的空格块,则代码的意图更清晰。也许通过声明:

String msg = String(' ', 200)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接