Visualizzazione dei risultati da 1 a 8 su 8

Discussione: VB NET GetType Marshal

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133

    VB NET GetType Marshal

    Rieccomi a voi con il solito problema di sintassi.

    Ho finalmente capito come leggere/scrivere un Array multidimensionali in VB, avanza ancora un problema:
    capire di che tipo di array si tratta (integer,byte,single,decimal,...) e quindi convertire il tipo in quanti byte occupa ogni singolo elemento (per ora è un argomento di passaggio, ma risulta ingestibile TipoInByte).

    codice:
        Public Sub Write(ByVal Mat As Object, ByVal TipoInByte As Integer)
            Dim ND As Integer = 1
            If IsArray(Mat) Then ND = Mat.Length
            Dim NDinByte As Integer = TipoInByte * ND
            Dim VettByte(0 To NDinByte - 1) As Byte
            Buffer.BlockCopy(Mat, 0, VettByte, 0, NDinByte)
            internal_BinaryWriter.Write(VettByte)
            VettByte = Nothing
        End Sub
    ho provato con istruzioni di questo tipo, ma per un verso o per l'altro mi danno errore

    Dim tipo As Type
    tipo = Mat.GetType().GetElementType
    Dim NinByte = System.Runtime.InteropServices.Marshal.SizeOf(tipo .GetType)

    Grazie anticipato per l'aiuto
    Tomas
    tomas

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Scusami ho inserito nella descrizione NET per forza dell'abitudine, il compilatore che uso è Microsoft Visual Basic 2008 Express Edition. Con ASP non c'entra per nulla. Cosa devo fare adesso? Aprire un altro post? Correggere la descrizione?

    Nel frattempo hai visto il problema? Sai la sintassi corretta per determinare il tipo di un array?

    codice:
    private static Array RedimPreserve(Array SourceArray, int Length){
    Type type1 = SourceArray.GetType();
    Array array2 = Array.CreateInstance(SourceArray.GetType().GetElementType(), Length);
    Array.Copy(SourceArray, array2, Length); return array2;
    }
    Ho trovato questo in C (è solo un esempio per capire di che tipo è un array), ma non riesco a tradurla in modo corretto in VB. Tu sei capace?
    Grazie e scusami per l'errore
    Tomas
    tomas

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Ulteriore scusa per il mio commento di prima, la descrizione è giusta e hai fatto benissimo a metterlo nella sezione giusta. Purtroppo ho la testa "nel problema" e non riesco a venirne a capo.
    Scusate per i "pasticci".
    Tomas
    tomas

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Vediamo se ridando vita a questo post (dopo gli errori precedenti) riesco a interessare al problema qualcuno.
    Grazie
    Tomas
    tomas

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Non credo che sia difficile la soluzione, servirebbe qualcuno che è abituato alla sintassi delle classi, e che riesca a trovare il modo di usare il "tipo" che però è in formato strnga.
    Speriamo che oggi vada meglio e che qualcuno abbia tempo di guardare il problema.
    Tomas
    tomas

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    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
    tomas

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Interessante questo botta e risposta tra te e te.... :berto:

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Come prima cosa bisogna rimboccarsi le maniche, poi sperare in un aiuto
    tomas
    tomas

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.