A una soluzione ci sono arrivato!![]()
Non sarà sicuramente il top della programmazione, ma almeno funziona.
(Forse bisognerebbe dimensionare un "Buffer" di I/O in modo da non ricreare
un intero vettore grande come l'intera matrice. Per ora è così, in futuro migliorerò)
Qualunque consiglio, e aiuto, è ben accetto.
[code]
Public Sub WriteMat(ByVal Mat As Object)
If IsArray(Mat) Then
Dim NDinByte As Integer = Mat.Length * System.Runtime.InteropServices.Marshal.SizeOf(Mat. GetType().GetElementType)
Dim VettByte(0 To NDinByte - 1) As Byte
Buffer.BlockCopy(Mat, 0, VettByte, 0, NDinByte)
internal_BinaryWriter.Write(VettByte)
VettByte = Nothing
Else
Dim V As Array = Array.CreateInstance(Mat.GetType(), 1)
Dim NDinByte As Integer = System.Runtime.InteropServices.Marshal.SizeOf(Mat. GetType())
V(0) = Mat
Dim VettByte(0 To NDinByte - 1) As Byte
Buffer.BlockCopy(V, 0, VettByte, 0, NDinByte)
internal_BinaryWriter.Write(VettByte)
VettByte = Nothing
End If
End Sub
Public Sub ReadMatShort(ByRef Mat As Object)
If IsArray(Mat) Then
Dim NDinByte As Integer = Mat.Length * System.Runtime.InteropServices.Marshal.SizeOf(Mat. GetType().GetElementType)
Dim VettByte(0 To NDinByte - 1) As Byte
VettByte = internal_BinaryReader.ReadBytes(NDinByte)
Buffer.BlockCopy(VettByte, 0, Mat, 0, NDinByte)
VettByte = Nothing
Else
Dim V As Array = Array.CreateInstance(Mat.GetType(), 1)
Dim NDinByte As Integer = System.Runtime.InteropServices.Marshal.SizeOf(Mat. GetType())
Dim VettByte(0 To NDinByte - 1) As Byte
VettByte = internal_BinaryReader.ReadBytes(NDinByte)
Buffer.BlockCopy(VettByte, 0, V, 0, NDinByte)
Mat = V(0)
VettByte = Nothing
End If
End Sub
[\code]
Tomasotto