Differenze tra le versioni di "Definizione ed uso dei Memory Stream"

Da Gambas-it.org - Wikipedia.
Riga 12: Riga 12:
  
 
==Memory Stream in modalità "For Write"==
 
==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:
+
La modalità in "Scrittura" (''For Write'') risulta utile nel caso si debbano scrivere dei valori all'interno di un'area di memoria riservata, allocata.
 +
 
 +
Per esempio, 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()
 
  '''Public''' Sub Button1_Click()
Riga 22: Riga 24:
 
   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>
+
   sW = 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.''

Versione delle 17:38, 19 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"

La modalità in "Scrittura" (For Write) risulta utile nel caso si debbano scrivere dei valori all'interno di un'area di memoria riservata, allocata.

Per esempio, 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

  sW = 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 j, bW As Byte

 sR = Memory p For Read

 For j = 0 To 3
' Il puntatore nello Stream avanzerà di un byte per volta coerentemente con l'area della memoria allocata:
   Read #sR, bR

' A fini didattici, mostriamo il valore in console
   Print "---> ", bR
 Next


Si procederà ugualmente per dereferenziare i puntatori 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