Assegnare un Puntatore ad una Struttura per dereferenziarlo
Da Gambas-it.org - Wikipedia.
Come sappiamo per dereferenziare un Puntatore, ossia per leggere i valori salvati all'interno dell'area di memoria riservata da esso puntata [nota 1], possiamo utilizzare in Gambas due risorse:
- le funzioni specifiche di dereferenziazione dei Puntatori (ad esempio: Byte@(), Short@(), etc.);
- i Memory Stream.
Possiamo, però, adoperare anche le Strutture, avendo cura di creare un'apposita Struttura che rispetti rigidamente la dimensione dell'area di memoria riservata puntata dal Puntatore e il tipo di valori contenuti nei vari membri che compongono la Struttura medesima. [nota 2]
Facciamo un semplice esempio:
Public Struct STRUTTURA b As Byte s As Short i As Integer l As Long End Struct Public Sub Main() Dim p As Pointer Dim st As Stream Dim strut As New STRUTTURA ' Procediamo a riempire l'area di memoria riservata con valori di diverso tipo di dati: p = Alloc(Object.SizeOf(strut), 1) st = Memory p For Write Write #st, 99 As Byte Seek #st, 2 Write #st, 999 As Short Write #st, 99999 As Integer Write #st, 9999999 As Long st.Close ' Assegnamo il "Puntatore" alla variabile di tipo della "Struttura" dichiarata. ' Di fatto il "Puntatore" viene dereferenziato attraverso l'impiego della "Struttura." strut = p ' Vediamo il risultato per ciascun valore in console: With strut Print .b Print .s Print .i Print .l End With Free(p) End
Note
[1] Vedere la seguente pagina: Dereferenziazione di un Puntatore
[2] Per l'uso di questa modalità con le funzioni esterne, vedere:
Dereferenziare senza Memory-Stream un Puntatore ad una Struttura, passato da una funzione esterna