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

Da Gambas-it.org - Wikipedia.
Riga 17: Riga 17:
 
   
 
   
 
   Dim p As Pointer
 
   Dim p As Pointer
   Dim pS As Stream
+
   Dim sW As Stream
   Dim j, by As Byte
+
   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>
 
   
 
   
   pSt = Memory p For Write  ''<Font Color= #006400>' questa memoria sarà un flusso (stream) che creeremo appositamente, e...''</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 j = 80 to 83
+
  For bW = 80 to 83
    Write #pS, j As Byte
+
    Write #sW, bW As Byte
  Next
+
  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</span>.

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