Oppure

Loading
25/05 15:29
marcosta
Buon giorno a tutti.
Sto cercando di convertire un vecchio programma VB6 in VB.NET, sto usando VB2019 ma credo non abbia molta importanza.
nel programma VB6 avevo creato una Type per leggere e scrivere un file random purtroppo non riesco a convertirla in vb.net di conseguenza non riesco a leggere i dati salvati con la versione VB6, ho provato a fare la conversione con vb2005.net, converte tutto il resto abbastanza bene ma quando tento di leggere i file niente da fare, chiedo aiuto.
Allego le die versioni.

VB6:
Type SalvaLas
    FileName As String * 80 
    SigLas As String * 6 
    CoordLasX(1 To 50) As Integer 
    CoordLasY(1 To 50) As Integer 
    RuotaLas As Integer 
    LungLas As Integer 
    LargLas As Integer 
    NVert As Integer 
    NLas  As Integer 
    Tral(1 To 5, 1 To 2) As Integer
    NTral As Integer 
    Fer1(1 To 5, 1 To 3) As Integer
    Fer2(1 To 5, 1 To 3) As Integer
    Fer3(1 To 5, 1 To 3) As Integer
    PolisX(1 To 80, 1 To 4) As Integer
    PolisY(1 To 80, 1 To 4) As Integer
    PolMaxX(1 To 80) As Integer
    PolMaxY(1 To 80) As Integer
    PolisH(80) As Integer
    NPol As Integer
    ForiX(1 To 80, 1 To 4) As Integer
    ForiY(1 To 80, 1 To 4) As Integer
    ForMaxX(1 To 80) As Integer 
    ForMaxY(1 To 80) As Integer
    NFor As Integer
    RisX(1 To 80, 1 To 4) As Integer
    RisY(1 To 80, 1 To 4) As Integer
    RisMaxX(1 To 80) As Integer
    RisMaxY(1 To 80) As Integer
    RisH(1 To 80) As Integer
    NRis As Integer
    PosFileOr As Integer
    Offsetx As Integer
    Offsety As Integer
    Separatore As Integer
    LargSep As Integer
    LungSep As Integer
    PosLas As Integer
    LatoLas As Integer
    NPic As Integer
    Testo As String * 20
End Type

Public Sal As SalvaLas



VB.NET Tradotto da VB2005.net

'UPGRADE_WARNING: La dimensione della stringa di lunghezza fissa deve essere contenuta nel buffer. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
<VBFixedString(80), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst:=80)> Public FileName As Char
'UPGRADE_WARNING: La dimensione della stringa di lunghezza fissa deve essere contenuta nel buffer. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
<VBFixedString(6), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst:=6)> Public SigLas As Char
<VBFixedArray(49)> Dim CoordLasX() As Short
<VBFixedArray(49)> Dim CoordLasY() As Short
Dim RuotaLas As Short
Dim LungLas As Short
Dim LargLas As Short
Dim NVert As Short
Dim NLas As Short
<VBFixedArray(4, 1)> Dim Tral(,) As Short
Dim NTral As Short 'Numero tralicci nella Lastra
<VBFixedArray(4, 2)> Dim Fer1(,) As Short
<VBFixedArray(4, 2)> Dim Fer2(,) As Short
<VBFixedArray(4, 2)> Dim Fer3(,) As Short
<VBFixedArray(79, 3)> Dim PolisX(,) As Short
<VBFixedArray(79, 3)> Dim PolisY(,) As Short
<VBFixedArray(79)> Dim PolMaxX() As Short
<VBFixedArray(79)> Dim PolMaxY() As Short
<VBFixedArray(79)> Dim PolisH() As Short
Dim NPol As Short
<VBFixedArray(79, 3)> Dim ForiX(,) As Short
<VBFixedArray(79, 3)> Dim ForiY(,) As Short
<VBFixedArray(79)> Dim ForMaxX() As Short
<VBFixedArray(79)> Dim ForMaxY() As Short
Dim NFor As Short
<VBFixedArray(79, 3)> Dim RisX(,) As Short
<VBFixedArray(79, 3)> Dim RisY(,) As Short
<VBFixedArray(79)> Dim RisMaxX() As Short
<VBFixedArray(79)> Dim RisMaxY() As Short
<VBFixedArray(79)> Dim RisH() As Short
Dim NRis As Short
Dim PosFileOr As Short
Dim Offsetx As Short
Dim Offsety As Short
Dim Separatore As Short
Dim LargSep As Short
Dim LungSep As Short
Dim PosLas As Short
Dim LatoLas As Short
Dim NPic As Short
'UPGRADE_WARNING: La dimensione della stringa di lunghezza fissa deve essere contenuta nel buffer. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
<VBFixedString(20), System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValArray, SizeConst:=20)> Public Testo As Char

'UPGRADE_TODO: "Initialize" deve essere chiamato per inizializzare istanze di questa struttura. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
Public Sub Initialize()
'UPGRADE_WARNING: Il limite inferiore della matrice CoordLasX è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim CoordLasX(49)
'UPGRADE_WARNING: Il limite inferiore della matrice CoordLasY è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim CoordLasY(49)
'UPGRADE_WARNING: Il limite inferiore della matrice Tral è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim Tral(4, 1)
'UPGRADE_WARNING: Il limite inferiore della matrice Fer1 è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim Fer1(4, 2)
'UPGRADE_WARNING: Il limite inferiore della matrice Fer2 è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim Fer2(4, 2)
'UPGRADE_WARNING: Il limite inferiore della matrice Fer3 è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim Fer3(4, 2)
'UPGRADE_WARNING: Il limite inferiore della matrice PolisX è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim PolisX(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice PolisY è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim PolisY(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice PolMaxX è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim PolMaxX(79)
'UPGRADE_WARNING: Il limite inferiore della matrice PolMaxY è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim PolMaxY(79)
ReDim PolisH(79)
'UPGRADE_WARNING: Il limite inferiore della matrice ForiX è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim ForiX(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice ForiY è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim ForiY(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice ForMaxX è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim ForMaxX(79)
'UPGRADE_WARNING: Il limite inferiore della matrice ForMaxY è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim ForMaxY(79)
'UPGRADE_WARNING: Il limite inferiore della matrice RisX è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim RisX(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice RisY è stato cambiato da 1,1 a 0,0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim RisY(79, 3)
'UPGRADE_WARNING: Il limite inferiore della matrice RisMaxX è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim RisMaxX(79)
'UPGRADE_WARNING: Il limite inferiore della matrice RisMaxY è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim RisMaxY(79)
'UPGRADE_WARNING: Il limite inferiore della matrice RisH è stato cambiato da 1 a 0. Fare clic per ulteriori informazioni: 'MS.VSCC.v80/dv_commoner/local/…;'
ReDim RisH(79)
End Sub
End Structure


Public Sal As SalvaLas



Ho fatto diversi Tentativi come sostituire short con integer o char con String ma senza soluzione.
Ho notato che la lunghezza di Sal misurata con una Len(Sal) è diversa tra le due versioni e probabilmente è il motivo della mancata lettura del file.

il file lo apro con:

ffCP = FreeFile()
FileOpen(ffCP, NomeFile(1) + ".dat", OpenMode.Random,,, Len(Sal))
FileGet(ffCP, Sal,)


Naturalmente ho cercato su internet ma non ho trovato nulla di significativo.
Grazie
Ultima modifica effettuata da Thejuster 25/05 17:42
aaa
25/05 17:51
Thejuster
Ciao marcosta.
Ricorda di usare i tag [ code ] e [ quote ] altrimenti è veramente impossibile capire...

Non ci capisco granché di vb.net sicuramente @Carlo potrà aiutarti.
Ma personalmente è la prima volta che vedo <VBFixedArray(49)>

Sicuro che non sia quello il problema?

da quel che leggo, solitamente è un'attributo che va inserito in una struttura.
Ma altrettanto strano. Perché solitamente la dimensiona di un array va dichiarata direttamente senza
usare quell'attributo

esempio


Dim array_fisso(10)  As Integer



che sarebbe un array di 10 elementi.
C'è poco da fidarsi dei convertitori.
Poi come detto, Carlo ne sà più di me sul vb.net spero sappia aiutarti.


mire.forumfree.it/ - Mire Engine
C# UI Designer
25/05 19:14
nessuno
Prova a modificare così la struttura

<VBFixedString(80)> Dim Filename As String
<VBFixedString(6)> Dim SigLas As String
<VBFixedArray(49)> Dim CoordLasX() As Short
<VBFixedArray(49)> Dim CoordLasY() As Short
Dim RuotaLas As Short
Dim LungLas As Short
Dim LargLas As Short
Dim NVert As Short
Dim NLas As Short
<VBFixedArray(4, 1)> Dim Tral(,) As Short
Dim NTral As Short 'Numero tralicci nella Lastra
<VBFixedArray(4, 2)> Dim Fer1(,) As Short
<VBFixedArray(4, 2)> Dim Fer2(,) As Short
<VBFixedArray(4, 2)> Dim Fer3(,) As Short
<VBFixedArray(79, 3)> Dim PolisX(,) As Short
<VBFixedArray(79, 3)> Dim PolisY(,) As Short
<VBFixedArray(79)> Dim PolMaxX() As Short
<VBFixedArray(79)> Dim PolMaxY() As Short
<VBFixedArray(79)> Dim PolisH() As Short
Dim NPol As Short
<VBFixedArray(79, 3)> Dim ForiX(,) As Short
<VBFixedArray(79, 3)> Dim ForiY(,) As Short
<VBFixedArray(79)> Dim ForMaxX() As Short
<VBFixedArray(79)> Dim ForMaxY() As Short
Dim NFor As Short
<VBFixedArray(79, 3)> Dim RisX(,) As Short
<VBFixedArray(79, 3)> Dim RisY(,) As Short
<VBFixedArray(79)> Dim RisMaxX() As Short
<VBFixedArray(79)> Dim RisMaxY() As Short
<VBFixedArray(79)> Dim RisH() As Short
Dim NRis As Short
Dim PosFileOr As Short
Dim Offsetx As Short
Dim Offsety As Short
Dim Separatore As Short
Dim LargSep As Short
Dim LungSep As Short
Dim PosLas As Short
Dim LatoLas As Short
Dim NPic As Short
<VBFixedString(20)> Dim Testo As String

Ultima modifica effettuata da nessuno 25/05 19:16
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/05 0:12
marcosta
Grazie a tutti per l'interessamento
Ho trovato la soluzione, errore mio, scusate per il tempo perduto
nella riga <VBFixedArray(79)> Dim PolisH() As Short
ho scritto erroneamente (79) perché gli indici in vb.net partono sempre da 0 mentre in vb6 li avevo fatti partire da 1 definendoli (1 To 80).
Questa modifica della dimensione era corretta per gli altri dimensionamenti ma non per la definizione su citata che aveva come indice fisso (80).
Ho modificato scrivendo (80) al posto di (79) e tutto è andato a posto.
Dovrò acquistare un monitor più grande Sigh!
aaa