Assegnare un Puntatore ad una Struttura per dereferenziarlo
Da Gambas-it.org - Wikipedia.
Versione del 8 ago 2020 alle 05:41 di Vuott (Discussione | contributi)
Come sappiamo per dereferenziare un Puntatore, ossia per leggere i valori salvati all'interno dell'area di memoria riservata da esso puntata, possiamo utilizzare in Gabmas 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, nonché il tipo di valori da contenere nei vari membri che compongono la Struttura medesima. [Nota 1]
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 anche: Dereferenziare senza Memory-Stream un pointer ad una Struttura, passato da una funzione esterna