2011-12-02 13 views
5

Ho quasi finito la conversione di un modulo da VB6 a VB.NET, ma ho problemi con le seguenti 2 citazioni e mi chiedo se c'è un modo per farlo:Conversione di un modulo VB6 in VB.NET

Structure AUDINPUTARRAY 
    bytes(5000) As Byte 
End Structure 

che sto cercando di cambiare quella linea byte da: byte Dim (5000) come byte ma non è avermi permesso di definire le dimensioni in una struttura.


Ecco il secondo:

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

Non ne ho la più pallida idea su come convertire: msg As String * 200

risposta

4

non è possibile dichiarare una dimensione iniziale in VB.Net, è possibile impostare la sua dimensione in seguito utilizzando istruzione ReDim nel costruttore o ovunque sia necessario

Structure AUDINPUTARRAY 
    Public bytes() As Byte 
    Public Sub New(ByVal size As Integer) 
     ReDim bytes(size) ' set size=5000 

    End Sub 


End Structure 

in Visual Basic .NET, pezzi non posso t dichiarare una stringa con una lunghezza fissa a meno che non si utilizzi l'attributo VBFixedStringAttribute Class nella dichiarazione. Il codice nell'esempio precedente causa un errore.

Si dichiara una stringa senza una lunghezza. Quando il codice assegna un valore alla stringa, la lunghezza del valore determina la lunghezza della stringa http://msdn.microsoft.com/en-us/library/f47b0zy4%28v=vs.71%29.aspx . così il vostro Declarration diventerà

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

Wow, grazie, non ero a conoscenza di ReDim o VBFixedStringAttribute. – user1060582

+1

'Public Sub AUDINPUTARRAY()' non è un costruttore. Il costruttore è 'Public Sub New()', ma non puoi avere un costruttore senza parametri per le struct. – GSerg

+0

scusa è stato per errore ho mixato la sintassi C#, l'ho scritta aplogize. – Akshita

1

È possibile farlo attraverso attributi

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

Vorrei suggerire che, mentre il refactoring il codice da VB6 a .NET, che si prende un altro sguardo a se si desidera anche per emulare la lunghezza fissa msg As String * 200. Se si stava contando sulla stringa di lunghezza fissa in modo da poter sminuire i caratteri alla fine e avere ancora un record di 200 caratteri, si tratta di un codice disordinato che dipende dagli effetti collaterali di una funzione.

Quando abbiamo convertito da VB6 (un processo ancora in corso), ha reso l'intento del codice più chiaro se impostiamo la stringa in modo esplicito su un blocco di spazi di 200 byte. Forse dichiarando:

String msg = String(' ', 200)

(se questo è valido in VB.net e C#).