Definizione ed uso dei Memory Stream: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 17: | Riga 17: | ||
Dim p As Pointer | Dim p As Pointer | ||
Dim | Dim sW As Stream | ||
Dim | Dim bW As Byte | ||
p = Alloc(4) ''<Font Color= #006400>' riserviamo 4 byte da qualche parte in memoria''</font> | p = Alloc(4) ''<Font Color= #006400>' riserviamo 4 byte da qualche parte in memoria''</font> | ||
pW = Memory p For Write ''<Font Color= #006400>' questa memoria sarà un flusso (stream) che creeremo appositamente, e...''</font> | |||
<Font Color= #006400>' ''...nel quale andiamo a scrivere i 4 valori byte.'' | <Font Color= #006400>' ''...nel quale andiamo a scrivere i 4 valori byte.'' | ||
' ''Ogni valore byte occuperà la dimensione di 1 byte, quindi copriranno esattamente i 4 byte allocati:</font> | ' ''Ogni valore byte occuperà la dimensione di 1 byte, quindi copriranno esattamente i 4 byte allocati:</font> | ||
For bW = 80 to 83 | |||
Write #sW, bW As Byte | |||
Next | |||
'''End''' | '''End''' | ||
| Riga 34: | Riga 34: | ||
==Memory Stream in modalità "For Read"== | ==Memory Stream in modalità "For Read"== | ||
In modalità "''For Read''" i Memory-Stream possono essere usati per [[Variabili_di_tipo_Puntatore_e_loro_dereferenziazione|dereferenziare i puntatori]] passati da funzioni esterne. | In modalità "''For Read''" i Memory-Stream possono essere usati per [[Variabili_di_tipo_Puntatore_e_loro_dereferenziazione|dereferenziare i puntatori]]. | ||
Abbiamo visto dell'esempio del paragrafo precedente, visto per la modalità in "''scrittura''" dei Memory-Stream, quattro valori numerici sono stati memorizzati in un area riservata, pumtata dalla variabile puntatore "p". | |||
Ora procediamo a dereferenziare quella variabile di tipo ''pointer'', e ad estrarre i valori contenuti nell'aera riservata di memoria: | |||
'''Public''' Sub Button1_Click() | |||
Dim p As Pointer | |||
Dim sR As Stream | |||
Dim bW As Byte | |||
sR = Memory p For Read | |||
For bR = 0 To 3 | |||
Read #sR, bR | |||
Print "---> ", bR <Font Color= #006400>' ''A fini didattici, mostriamo il valore in console''</font> | |||
Next | |||
Si procederà ugualmente per dereferenziare i puntatori <SPAN style="text-decoration:underline"passati da funzioni esterne</span>. | |||
'''Public''' Sub Button1_Click() | '''Public''' Sub Button1_Click() | ||
Versione delle 17:01, 14 lug 2012
La classe Memory-Stream crea flussi che utilizzano la memoria, anziché un disco o una connessione di rete.
Con Gambas-3 non è più possibile usare un puntatore (Pointer) in uno stream. Si deve invece utilizzare uno stream di memoria con l'istruzione MEMORY.
Sintassi:
Flusso = MEMORY Puntatore FOR [ READ ] [ WRITE ]
- Se la parola chiave READ viene specificata, allora è permessa la lettura.
- Se la parola chiave WRITE viene specificata, allora è permessa la scrittura.
Memory Stream in modalità "For Write"
se si intende creare una sequenza di byte &h80, &h81, &h82, &h83, lo si può fare con i chr(); oppure si può scrivere:
Public Sub Button1_Click()
Dim p As Pointer
Dim sW As Stream
Dim bW As Byte
p = Alloc(4) ' riserviamo 4 byte da qualche parte in memoria
pW = Memory p For Write ' questa memoria sarà un flusso (stream) che creeremo appositamente, e...
' ...nel quale andiamo a scrivere i 4 valori byte.
' Ogni valore byte occuperà la dimensione di 1 byte, quindi copriranno esattamente i 4 byte allocati:
For bW = 80 to 83
Write #sW, bW As Byte
Next
End
Memory Stream in modalità "For Read"
In modalità "For Read" i Memory-Stream possono essere usati per dereferenziare i puntatori.
Abbiamo visto dell'esempio del paragrafo precedente, visto per la modalità in "scrittura" dei Memory-Stream, quattro valori numerici sono stati memorizzati in un area riservata, pumtata dalla variabile puntatore "p".
Ora procediamo a dereferenziare quella variabile di tipo pointer, e ad estrarre i valori contenuti nell'aera riservata di memoria: Public Sub Button1_Click()
Dim p As Pointer Dim sR As Stream Dim bW As Byte sR = Memory p For Read For bR = 0 To 3 Read #sR, bR Print "---> ", bR ' A fini didattici, mostriamo il valore in console Next
Si procederà ugualmente per dereferenziare i puntatori <SPAN style="text-decoration:underline"passati da funzioni esterne.
Public Sub Button1_Click() Dim pEst As Pointer Dim pS As Stream Dim by As Byte ' Prendiamo da una funzione esterna un valore di tipo puntatore: funzione_esterna_che_passa_un puntatore(pEst) ' Usiamo i Memory Stream in modalità di "lettura": pS = Memory pEst For Read 'Andiamo a dereferenziare e, quindi, a leggere il dato: Read #pS, by ' Ora, a fini didattici, mostriamo il valore in console: Print by End