我差不多已经完成了将模块从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
答案 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#中都有效)。