Se non vado errante per passare un parametro come indirizzo e non per valore c'è l'istruzione ByRef.
Sì, Gambas fornisce, come risorsa dedicata in modo specifico per passare un valore "
per Riferimento" (che è come dire "per Indirizzo"), la parola-chiave "
ByRef ":
Public Sub Main()
Dim vl As Integer
vl = 10
Funzione(ByRef vl)
Print vl
End
Private Function Funzione(ByRef i As Integer)
i *= 1000
End
Evidentemente la parola-chiave "
ByRef " provvederà a passare alla Funzione chiamata l'
indirizzo di memoria della variabile da passare come parametro attuale.
Come però sappiamo, noi possiamo utilizzare anche un Puntatore, o più precisamente "
l'indirizzo di memoria della variabile" (di un tipo numerico o anche di tipo
String), per effettuare un passaggio a una sotto-procedura (più segnatamente una
Funzione).
Per avere l'
indirizzo di memoria della variabile, da passare, dovremo utilizzare la funzione "
VarPtr( ) ".
Questa modalità comporta, però, un lavoro più complesso all'interno della Funzione chiamata, in particolare se il valore passato attraverso il Puntatore deve essere manipolato, poiché - come sappiamo - per incidere sui dati presenti nell'area di memoria puntata da un
Puntatore è assolutamente necessario l'uso delle risorse dei "
Memory Stream ".
Esempio:
Public Sub Main()
Dim vl As Integer
vl = 10
Funzione(VarPtr(vl))
Print vl
End
Private Function Funzione(p As Pointer)
Dim st As Stream
' 1) Dereferenziamo il Puntatore ricevuto;
' 2) Manipoliamo il suo valore originario contenuto nella variabile "i";
' 3) Scriviamo il nuovo valore nell'area di memoria puntata dal Puntatore "p";
st = Memory p For Write
Write #st, Int@(p) * 1000 As Integer
st.Close
End