Leggere nell'area di memoria occupata da un oggetto

Da Gambas-it.org - Wikipedia.
Versione del 14 lug 2015 alle 02:49 di Vuott (Discussione | contributi) (Creata pagina con '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...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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)
  p2 = p2 + 40      ' per i sistemi a 32bit questo valore va impostato a "24"
  Print "La Proprietà '.Name' è: "; String@(Pointer@(p2))
  
  p2 = p2 - 40      ' per i sistemi a 32bit questo valore va impostato a "24"
  p3 = Pointer@(p2)
  p3 = p3 + 24      ' per i sistemi a 32bit questo valore va impostato a "16"
  Print "La Classe è: ";; String@(Pointer@(p3))
  
End