Differenze tra le versioni di "Vedere in runtime tutte le variabili locali presenti in un'applicazione"
Da Gambas-it.org - Wikipedia.
Riga 5: | Riga 5: | ||
Mostriamo un breve esempio pratico: | Mostriamo un breve esempio pratico: | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim s As String | ||
+ | Dim p As Pointer | ||
+ | Dim i As Integer | ||
+ | |||
+ | <FONT Color=gray>' ''La variabile stringa deve contenere almeno due caratteri:''</font> | ||
+ | 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 | Private Const LAT As Short = 256 | ||
Riga 20: | Riga 39: | ||
po = VarPtr(s) | po = VarPtr(s) | ||
− | If po = 0 Then Error.Raise(" | + | If po = 0 Then Error.Raise("Puntatore non valido !") |
st = Memory po For Read | st = Memory po For Read |
Versione delle 19:28, 19 gen 2017
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