Newsgroup: it.comp.lang.visual-basic
Titolo: Ci riprovo...

... avrei la necessita di "allocarmi" un quantità x di memoria da
utilizzare sia in lettura che in scrittura !!
Una volta, nel basic di tanto tempo fa si usa poke & peek (o simili) !!
E' possibile una cosa del genere con vb ???
aiutatemi !!!!!!!!!!
GRAZIEEEEEEEEEEEeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!!!!!!

...
... avrei la necessita di "allocarmi" un quantità x di memoria da
utilizzare sia in lettura che in scrittura !!
Una volta, nel basic di tanto tempo fa si usa poke & peek (o simili) !!
E' possibile una cosa del genere con vb ???
Spiegami a cosa potrebbe mai servirti...

 Spiegami a cosa potrebbe mai servirti...
Nel mio caso:
ricevo dei dati, dal una rete, con dei picchi elevati, che non mi
consentono di elaborarli in "tempo reale". Quindi ho la necessità di creare
dei buffer. La soluzione migliore mi sembra quella di un'accesso alla ram,
sia per velocità che dinamicità (posso crearmi dei buffer al momento in cui
ho la necessità).
Ho escuso altre possibilità: tipo quella di creare buffer sull'hd; per le
prove attualmente sto utilizzando delle matrici... ma non mi sembra una
soluzione ottimale.
Credo che per risolvere tutti i miei guai mi convenga utilizzare un'altro
linguaggio (tipo il C) però sono testardo e ci voglio riuscire in vb.
Grazie !!!!!!!!!!!!!

 Spiegami a cosa potrebbe mai servirti...
Nel mio caso:
ricevo dei dati, dal una rete, con dei picchi elevati, che non mi
consentono di elaborarli in "tempo reale". Quindi ho la necessità di creare
dei buffer. La soluzione migliore mi sembra quella di un'accesso alla ram,
sia per velocità che dinamicità (posso crearmi dei buffer al momento in cui
ho la necessità).
Ho escuso altre possibilità: tipo quella di creare buffer sull'hd; per le
prove attualmente sto utilizzando delle matrici... ma non mi sembra una
soluzione ottimale.
Se vuoi proprio allocarti della memoria usa un array di bytes (perchè gli
array di dati non ti piacciono?)
Alla fine un array è un buffer, cambia solo il nome.
Ciao

 soluzione ottimale.
L'allocazione di un buffer tramite una matrice corrisponde all'allocazione
di un blocco di memoria ottenuto tramite GlobalAlloc().
In particolare, il blocco di memoria relativo ad una matrice di dimensioni
fisse, viene allocato utilizzando GMEM_FIXED Or GMEM_ZERONIT (GPTR).
La funzione GlobalAlloc() restituisce in questo caso il puntatore al primo byte
del blocco.
Lo stesso puntatore si può ottenere tramite VarPtr(BufferArray(0)).
La differenza è che l'allocazione della memoria è a carico di VB.
In sostanza, l'allocazione di un buffer tramite un array corrisponde
all'allocazione di un blocco di memoria. Puoi utilizzare gli strumenti che
VB mette a disposizione per far riferimento a questo blocco, oppure
assumerti l'onere della gestione utilizzando l'API Win32.
Nel primo caso, l'indice dell'array corrisponde al byte da cui
iniziare a scrivere una serie di valori. Nel secondo caso, gli incrementi
(positivi o negativi) del puntatore alla tua area-dati devi gestirli
manualmente (crandoti un ulteriore array per contenere i puntatori).
Probabilmente l'utilizzo del Buffer-array è una buona scelta.
Considera che con CopyMemory() puoi copiare un qualsiasi
blocco di dati nel tuo array partendo da una posizione qualsiasi
(minore di Len(BufferArray)).

Fino a qui grazie a tutti.
Ma se avessi la necessità di allargare il buffer (in pratica di creare un'altra
matrice) durante il run del programma ?

...
