Vedere in runtime tutte le variabili locali presenti in un'applicazione

Da Gambas-it.org - Wikipedia.

Vediamo in questa pagina una curiosità, ossia come sia possibile vedere in runtime l'identificatore di tutte le variabili locali presenti nel Modulo o una Classe dell'applicazione.

Ci serviremo di un Puntatore ad una variabile di tipo Stringa che sia stata istanziata.


Mostriamo un breve esempio pratico:

Public Sub Main()
 
 Dim s As String
 Dim p As Pointer
 Dim i As Integer
 
' La variabile stringa deve contenere almeno due caratteri:
  s = "a "
   
  p = VarPtr(s)
   
  For i = 0 To 23
    Print i, Byte@(p + i), Chr(Byte@(p + i))
  Next
  
End


Di seguito un altro esempio un po' più complesso del precedente:

Private Const LAT As Short = 256


Public Sub Main()
 
 Dim s As String
 Dim po As Pointer
 Dim c As Integer
 Dim bb As Byte[]
 Dim st As Stream
 Dim i As Integer
 
  s = "Testo qualsiasi"
  
  po = VarPtr(s)
  If po = 0 Then Error.Raise("Puntatore non valido !")
   
  st = Memory po For Read
  
  With bb = New Byte[LAT]
    .Read(st, 0, bb.Count)
    s = .ToString(0, bb.Count)
  End With
  st.Close
  
  c = InStr(s, Chr(&40) & Chr(&6E) & Chr(&65))
  
  s = bb.ToString(c + 4, InStr(s, "\x00\x00", c) - (c + 4))
  
  Print "Elenco delle variabili 'locali' presenti:\n"
  Print Replace(s, "\x00", "\n")
  
End


Private Procedure Nomen(b As Byte)

 Dim sh As Short
 Dim n As Integer
 Dim v As Variant
 
End