Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [VB6]Ridimensionare un array ...

    Ciao a tutti,

    il mio problema e' ridimensionare un array di byte gia' dimensionato ...
    Vi spiego xche' :
    Ho una dll che restituisce sia lo stream (sottoforma di byte) e la dimensione (Size) dello stream.
    Per poter far cio' devo per forza dichiarare un array (gia' dimensionato) ...
    Dim MyBuffer (0 to 6000000) as byte .

    Il problema qual'e' ! se vado a salvare il contenuto del mio buffer ottengo sempre la dimensione del buffer (come file ) ...

    Allora mi chiedevo se c'e' un modo per poter ridimensionare il mio buffer (che contiene gi'a l'immagine) usando appunto la lunghezza restituitami dalla funzione della dll.

    Altrimenti non mi resta che richiamre la funzione e passargli il nuovo buffer redimensionato (dalla precedente chiamata) per farmi riempire il nuovo buffer ... che sara' questa volta uguale al mio lenbuffer.

    Spero di essere stato chiaro nel delucidare la problematica.

    Aspetto vostri consigli

  2. #2

    Re: [VB6]Ridimensionare un array ...

    Originariamente inviato da filippo_260367
    Ciao a tutti,

    il mio problema e' ridimensionare un array di byte gia' dimensionato ...
    Vi spiego xche' :
    Ho una dll che restituisce sia lo stream (sottoforma di byte) e la dimensione (Size) dello stream.
    Per poter far cio' devo per forza dichiarare un array (gia' dimensionato) ...
    Dim MyBuffer (0 to 6000000) as byte .

    Il problema qual'e' ! se vado a salvare il contenuto del mio buffer ottengo sempre la dimensione del buffer (come file ) ...

    Allora mi chiedevo se c'e' un modo per poter ridimensionare il mio buffer (che contiene gi'a l'immagine) usando appunto la lunghezza restituitami dalla funzione della dll.

    Altrimenti non mi resta che richiamre la funzione e passargli il nuovo buffer redimensionato (dalla precedente chiamata) per farmi riempire il nuovo buffer ... che sara' questa volta uguale al mio lenbuffer.

    Spero di essere stato chiaro nel delucidare la problematica.

    Aspetto vostri consigli
    Beh... proprio chiarissimo.... NO...

    Hai provato ad usare un array dinamico? :

    Dim MyBuffer () as byte
    ....
    ReDim MyBuffer (0 to 6000000)
    ...
    lungh=ChiamaLaRoutine(...)
    ReDim Preserve MyBuffer (0 to lungh)

    IceCube_HT (VB6 fan Club)

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    A parte che puoi utilizzare la redim, non capisco perche' quando salvi il buffer devi salvarlo per forza tutto ...

  4. #4

    Re: Re: [VB6]Ridimensionare un array ...

    Originariamente inviato da icecube_HT
    Beh... proprio chiarissimo.... NO...

    Hai provato ad usare un array dinamico? :

    Dim MyBuffer () as byte
    ....
    ReDim MyBuffer (0 to 6000000)
    ...
    lungh=ChiamaLaRoutine(...)
    ReDim Preserve MyBuffer (0 to lungh)

    Ciao,

    mi spiace di non essere stato chiaro
    faro' un esempio ...
    Da una funzione A ricevo 2 elementi :
    1) un numero X di elementi (i miei byte )
    2) nell'altro valore quanti sono i miei elementi

    partendo dal presupposto che l'elemento N 1 viene passato per riferimento (byref) da una funzione, e' ovvio che io devo crearmi un array pronto e capiente a sufficenza a ricevere i miei byte.

    Pertanto se dimensiono il mio array :
    Dim MyBuffer () as byte

    Faccio un errore xche' il mio array non e' dimensionato abbastanza !
    Allora devo dimensionarlo con un valore che reputo (per eccesso) di circa 6MB avremo
    Dim MyBuffer (0 to 6291456) as byte
    Solo adesso potro' passarlo per riferimento alla funzione:

    Call Myfunction(Mybuffer(0), Lenbuffer)

    Mybuffer(0) ... vuol dire che gli passo il primo elemento dell' array
    Lenbuffer e' la lunghezza di cui parlavo prima, che mi viene restituita dalla funzione stessa
    (per altri linguaggi, e' importante ricevere anche la dimensione del buffer di dati .. si tratta comunque di una immagine,in modo da poterlo passare per dimensionare uno Stream)

    Cosi' facendo mi ritrovo il mio Mbuffer che contiene una bella immagine ... pero' ho un piccolo problema, in altri linguaggi avrei usato : Mystream.Read(Mybuffer,lenbuffer)
    ed avrei dimensionato automaticamente lo stream ... ma in VB forse questo non e' possibile.

    Ritornando a noi l'unico modo (che io conosco) per passare il mio buffer ad uno stream (per poi poterlo salvare su disco ) e' :
    myStream.Write(Mybuffer)
    L'unico mio problema e che se salvo cosi' ho un file immagine SEMPRE di 6MB ....
    ecco perche' vorrei ridimensionare il mo buffer...

    Forse ti ho incasinato VVoVe: + di prima ... ma almeno ci ho provato

  5. #5
    Guarda che quella postata da icecube_HT è la soluzione più semplice e comoda al tuo problema.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6

    Re: Re: Re: [VB6]Ridimensionare un array ...

    Originariamente inviato da filippo_260367
    ...Pertanto se dimensiono il mio array :
    Dim MyBuffer () as byte
    Faccio un errore xche' il mio array non e' dimensionato abbastanza !
    Allora devo dimensionarlo con un valore che reputo (per eccesso) di circa 6MB avremo
    Dim MyBuffer (0 to 6291456) as byte
    Ok, forse sono io che non mi sono spiegato bene...
    L'istruzione: Dim MyBuffer () as byte
    serve SOLO a dichiarare l'array come DINAMICO (ovvero ridimensionabile).
    SUBITO DOPO eseguirai: ReDim MyBuffer (0 to 6000000),
    quindi a questo punto e' "dimensionato abbastanza"
    per passarlo alla tua funzione.
    Quando otterrai la lunghezza EFFETTIVA, ridurrai la dimensione dell'array con
    il secondo ReDim (con la clausola Preserve per non perdere i dati).
    OK ?


    Ricordi che ti avevo detto PROVA ! Hai provato ? No ?
    IceCube_HT (VB6 fan Club)

  7. #7
    Ciao ice ...
    ti ringrazio innanzitutto,

    non avevo provato xche' non mi ero accorto che tu mi avevi scritto di ridimensionare 2 volte... ossia Redim e Redim Preserve ...
    non sapevo si potesse fare

    Grazie

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.