Differenze tra le versioni di "Definizione ed uso dei Memory Stream"
Riga 11: | Riga 11: | ||
− | + | ==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: | se si intende creare una sequenza di byte &h80, &h81, &h82, &h83, lo si può fare con i chr(); oppure si può scrivere: | ||
Riga 50: | Riga 50: | ||
+ | ==Memory Stream in modalità "For Read"== | ||
In modalità "''For Read''" i Memory-Stream possono essere usati, ad esempio, 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, ad esempio, per [[Variabili_di_tipo_Puntatore_e_loro_dereferenziazione|dereferenziare i puntatori]] passati da funzioni esterne. | ||
+ | |||
+ | '''Public''' Sub Button1_Click() | ||
+ | |||
+ | Dim pEst As Pointer | ||
+ | Dim pS As Stream | ||
+ | Dim by As Byte | ||
+ | |||
+ | <Font Color= #006400>' ''Prendiamo da una funzione esterna un valore di tipo puntatore:''</font> | ||
+ | funzione_esterna_che_passa_un puntatore(pEst) | ||
+ | |||
+ | <Font Color= #006400>' ''Usiamo i Memory Stream in modalità di "lettura":''</font> | ||
+ | pS = Memory pEst For Read | ||
+ | |||
+ | <Font Color= #006400>'Andiamo a dereferenziare e, quindi, a leggere il dato:''</font> | ||
+ | Read #pS, by As Byte | ||
+ | |||
+ | <Font Color= #006400>' ''Ora, a fini didattici, mostriamo il valore in console:''</font> | ||
+ | Print by | ||
+ | |||
+ | '''End''' | ||
+ | |||
Versione delle 15:06, 14 lug 2012
La classe MemoryStream 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 pSt As Stream Dim j as Integer Dim by As Byte p = Alloc(4) ' riserviamo 4 byte da qualche parte in memoria pSt = 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: Write #pSt, 80 As Byte Write #pSt, 81 As Byte Write #pSt, 82 As Byte Write #pSt, 83 As Byte ' Ora, a fini didattici, andiamo a leggere il contenuto dello stream: For j = 0 To 3 {1} ' Si comincia da byte n. 0, ossia dal 1° dei quattro. Seek #pSt, j Read #pSt, by Print by Next End
Memory Stream in modalità "For Read"
In modalità "For Read" i Memory-Stream possono essere usati, ad esempio, 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 As Byte ' Ora, a fini didattici, mostriamo il valore in console: Print by End
Note
[1] Se non si vuole usare il ciclo FOR, si potrà scrivere il passaggio della lettura così:
Seek #pSt, 0 Read #pSt, by Read #pSt, by Read #pSt, by Read #pSt, by
Il puntatore interno farà avanzare di un byte (trattandosi di valori byte) alla volta la lettura del flusso di memoria allocato sino al quarto byte.