2011-12-02 68 views
5

我几乎完成了将模块从VB6转换为VB.NET,但我遇到以下两个引号有问题,并且想知道是否有任何方法可以解决这个问题:将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 

我还没有就如何转换一个线索:味精作为字符串* 200

回答

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 。所以你declarration将成为

Private i As Integer, j As Integer, hWaveIn As Integer 
    <VBFixedString(200)> Private msg As String 
+0

哇谢谢,我不知道ReDim或VBFixedStringAttribute。 – user1060582

+1

'Public Sub AUDINPUTARRAY()'不是构造函数。构造函数是'Public Sub New()',但不能为结构使用无参数的构造函数。 – GSerg

+0

对不起,这是错误的我混合C#语法,我aplogize。 – 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#)。