2011-12-02 66 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#)。