Differenze tra le versioni di "Configurazione, organizzazione ed impostazione dell'oggetto Struttura secondo i sorgenti di Gambas"

Da Gambas-it.org - Wikipedia.
Riga 44: Riga 44:
 
  <FONT Color=gray>' ''Accede al membro "char *addr", e lo dereferenzia:''</font>
 
  <FONT Color=gray>' ''Accede al membro "char *addr", e lo dereferenzia:''</font>
 
   Print Byte@(p + 24)
 
   Print Byte@(p + 24)
  <FONT Color=gray>' ''Avanza di due byte causa dell'allineamento:''</font>
+
  <FONT Color=gray>' ''Avanza di due byte a causa dell'allineamento:''</font>
 
   Print Short@(p + 26)
 
   Print Short@(p + 26)
 
   Print Int@(p + 28)
 
   Print Int@(p + 28)
 
    
 
    
 
  '''End'''
 
  '''End'''

Versione delle 17:27, 21 mar 2016

Per la creazione di una Struttura, non v'è la sola e semplice allocazione di memoria per la memorizzazione dei dati in essa contenuti, ma, essendo anche un Oggetto di Gambas, si innesca una procedura più complessa che coinvolge più Strutture di dati a livello dei sorgenti di Gambas, e quindi diversi byte di memoria da occupare.

Tali risorse, insomma, servono sia per definire alcune caratteristiche generali dell'oggetto Struttura, sia per memorizzare i dati che essa contiene.

Vediamo, dunque, cosa avviene, appunto, a livello dei sorgenti di Gambas e quali loro risorse in particolare vengono richiamate e usate per creare e gestire una Struttura.

La memorizzazione, dunque, dei dati, avviene attraverso l'utilizzo di una Struttura, chiamata "CSTATICSTRUCT", così dichiarata nel file sorgente "...main/gbx/gbx_struct.h":

typedef
       struct {
               OBJECT ob;
               void *ref;
               char *addr;
       }
       CSTATICSTRUCT;

Laddove abbiamo:

  • OBJECT ob, rappresenta la Struttura OBJECT, contenuta nel file sorgente ".../main/gbx/gbx_object.h" dell'Interprete. Il primo membro di tale Struttura OBJECT è a sua volta un Puntatore alla Struttura chiamata CLASS e definita nel file sorgente ".../main/gbx/gbx_class.h".
  • void *ref, è un Puntatore.
  • char *addr, è un Puntatore all'area di memoria contenente i dati della Struttura creata nel nostro progetto Gambas.


Accedere e leggere nella Struttura CSTATICSTRUCT

E' possibile da un progetto Gambas penetrare nella Struttura CSTATICSTRUCT e leggere i dati contenuti in alcune suoi membri come mostriamo nel seguente semplice esempio:

Public Struct STRUTTURA
  b As Byte
  s As Short
  i As Integer
End Struct


Public Sub Main()
 
 Dim tt As New STRUTTURA
 Dim p As Pointer
 
  With tt
    .b = 99
    .s = 999
    .i = 99999
  End With
  
' Accede alla Struttura "CSTATICSTRUCT":
  p = Object.Address(tt)
  
' Accede al membro "char *addr", e lo dereferenzia:
  Print Byte@(p + 24)
' Avanza di due byte a causa dell'allineamento:
  Print Short@(p + 26)
  Print Int@(p + 28)
  
End