Mi sono domandato se sia possibile passare un valore ad una Funzione, priva di parametri e posta in un unico Modulo principale (progetto a riga di comando), senza potersi servire di:
* variabili globali;
* altri Moduli o Classi create dall'utente;
* qualsiasi file esterno;
* funzioni esterne;
* comandi o programmi con Shell o Exec.
Insomma, tutto in locale.
E' dura con queste premesse, eh ?!
A me, per tentare di risolvere il dilemma, è venuto in mente di provare ad utilizzare in Gambas un Puntatore alla Funzione, ed ho scritto questo:
Public Sub Main()
Dim p As Pointer
Dim st As Stream
Dim i As Integer
' Creiamo un Puntatore alla Funzione:
p = Calculus
' Scriviamo nel Puntatore un valore mediante i "Memory Stream":
st = Memory p For Write
Write #st, 9 As Integer
st.Close
' Invochiamo la Funzione:
i = Calculus()
Print "Valore ritornato: "; i
End
Private Function Calculus() As Integer
Dim pC As Pointer
' Puntiamo nuovamente alla Funzione:
pC = Calculus
' Dereferenziamo il Puntatore (le variabili "p" e "pC" contengono il medesimo indirizzo di memoria: quello della Funzione)
' e facciamo una qualsiasi operazione:
Return Int@(pC) * 100
End
Avete altre soluzioni e suggerimenti ?