Leggere nell'area di memoria occupata da un oggetto
Da Gambas-it.org - Wikipedia.
Versione del 20 ago 2015 alle 15:32 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 (per sistemi a 64bit), 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 + 24)) ' per i sistemi a 32bit questo valore va impostato a "16" Print "La Proprietà '.Name' è: "; String@(Pointer@(p2 + 40)) ' per i sistemi a 32bit questo valore va impostato a "24" If IsNull(Pointer@(p2 + 24)) = False Then Print "La Proprietà '.Background' è: ";; Hex(Long@(Pointer@(p2 + 24)) \ CLong(2 ^ 32), 8) ' i primi due byte a sinistra del risultato rappresentano il valore 'alfa' Print "La Proprietà '.Foreground' è: ";; Hex(Int@(Pointer@(p2 + 24)), 8) Endif p3 = Pointer@(p2 + 64) Print "La Proprietà '.Parent' è: ";; String@(Pointer@(p3 + 40)) End