Leggere nell'area di memoria occupata da un oggetto
Da Gambas-it.org - Wikipedia.
Versione del 2 ott 2022 alle 14:54 di Vuott (Discussione | contributi)
Un oggetto occupa anch'esso memoria. Quando viene creato, dunque, la variabile, che fa riferimento all'oggetto, punta ad un'area di memoria riservata.
Possiamo così ottenere l'indirizzo di tale area di memoria dell'oggetto e leggervi i dati contenuti.
Mostriamo un esempio pratico, con il quale leggeremo nell'area riservata di memoria di una Label posta sul Form, ed in particolare otterremo la denominazione della Proprietà ".Name" e quello della Classe "Label":
Public Sub Form_Open() Dim p1, p2, p3 As Pointer ' Puntiamo alla variabile dell'oggetto "Label": p1 = VarPtr(Label1) p2 = Pointer@(p1) p3 = Pointer@(p2) Print "La Classe è: "; String@(Pointer@(p3 + (SizeOf(gb.Pointer) * 3))) Print "La Proprietà '.Name' è: "; String@(Pointer@(p2 + (SizeOf(gb.Pointer) * 5))) If Pointer@(p2 + 24) > 0 Then
' i primi due byte a sinistra del risultato della seguente istruzione rappresentano il valore "alfa"
Print "La Proprietà '.Background' è: "; Hex(Long@(Pointer@(p2 + (SizeOf(gb.Pointer) * 3))) \ CLong(2 ^ 32), 8) Print "La Proprietà '.Foreground' è: "; Hex(Int@(Pointer@(p2 + (SizeOf(gb.Pointer) * 3))), 8) Endif p3 = Pointer@(p2 + 64) Print "La Proprietà '.Parent' è: "; String@(Pointer@(p3 + 40)) End