Differenze tra le versioni di "Ottenere il puntatore di una variabile di tipo Struttura"

Da Gambas-it.org - Wikipedia.
Riga 1: Riga 1:
E' possibile ottenere il ''Puntatore'' di una variabile di tipo ''Struttura'' (ossia una variabile di tipo ''Puntatore'' che ''punta'' all'indirizzo di memoria di una variabile di tipo ''Struttura'') mediante la funzione ''VarPtr( )'', la quale ritorna un ''Puntatore'' che punta alla variable contenuta in memoria:
+
E' possibile ottenere il ''Puntatore'' di una variabile di tipo ''Struttura'' (ossia una variabile di tipo ''Puntatore'' che ''punta'' all'indirizzo di memoria di una variabile di tipo ''Struttura'') mediante almeno due modalità:
 +
* con la funzione ''VarPtr( )'';
 +
* con il metodo ''Object.Address()''.
 +
 
 +
 
 +
==Ottenere il puntatore di una variabile di tipo Struttura mediante la funzione ''VarPtr( )''==
 +
La funzione ''VarPtr( )'' ritorna un ''Puntatore'' che punta alla variabile contenuta in memoria; pertanto si utilizzerà con la variabile di tipo ''Struttura'' con la seguente sintassi:
 
  <FONT color=B22222><B>VarPtr</b></font>(Variabile_Struttura) As Pointer
 
  <FONT color=B22222><B>VarPtr</b></font>(Variabile_Struttura) As Pointer
  
 
V'è da sottolineare che la variabile di tipo ''Struttura'' andrà assolutamente dichiarata all'esterno delle routine, come ''globale'', e preceduta dalla parola chiave ''Struct'':
 
V'è da sottolineare che la variabile di tipo ''Struttura'' andrà assolutamente dichiarata all'esterno delle routine, come ''globale'', e preceduta dalla parola chiave ''Struct'':
  Private variabile_struttura As <FONT color=B22222>Struct</font> Struttura_Principale
+
  Private variabile_struttura As <FONT color=B22222>Struct</font> STRUTTURA
  
  
Riga 65: Riga 71:
 
   Read #t, p2
 
   Read #t, p2
 
   Print String@(p2)
 
   Print String@(p2)
 +
 +
  t.Close
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
 +
 +
==Ottenere il puntatore di una variabile di tipo Struttura mediante il metodo ''Object.Address()''==
 +
In particolare tale metodo ritorna l'indirizo di memoria dell'oggetto posto come parametro del metodo stesso, e si utilizzerà con la variabile di tipo ''Struttura'' con la seguente sintassi:
 +
<FONT color=B22222><B>Object.Address</b></font>(Variabile_Struttura) As Pointer
 +
In questo caso è preferibile optare per la dichiarazione della variabile di tipo ''Struttura'' con la parola ''New'':
 +
Dim variabile_struttura As <FONT color=B22222>New</font> STRUTTURA
 +
 +
Per vedere un esempio del suo uso si rinvia a [[Leggere_e_scrivere_in_una_Struttura_con_i_Memory_Stream|questa pagina della WIKI]].

Versione delle 17:20, 1 ott 2014

E' possibile ottenere il Puntatore di una variabile di tipo Struttura (ossia una variabile di tipo Puntatore che punta all'indirizzo di memoria di una variabile di tipo Struttura) mediante almeno due modalità:

  • con la funzione VarPtr( );
  • con il metodo Object.Address().


Ottenere il puntatore di una variabile di tipo Struttura mediante la funzione VarPtr( )

La funzione VarPtr( ) ritorna un Puntatore che punta alla variabile contenuta in memoria; pertanto si utilizzerà con la variabile di tipo Struttura con la seguente sintassi:

VarPtr(Variabile_Struttura) As Pointer

V'è da sottolineare che la variabile di tipo Struttura andrà assolutamente dichiarata all'esterno delle routine, come globale, e preceduta dalla parola chiave Struct:

Private variabile_struttura As Struct STRUTTURA


Esempio:

Public Struct abcde
  a As Byte
  b As Short
  c As Integer
  d As Long
  e As String
End Struct

Private vrSt As Struct Abcde


Public Sub Main()

 Dim p1, p2 As Pointer
 Dim b As Byte
 Dim sr As Short
 Dim i As Integer
 Dim l As Long
 Dim t As Stream


  With vrSt
    .a = 9
    .b = 999
    .c = 999999
    .d = 999999999
    .e = "testo"
  End With


' Creiamo il "Puntatore" alla variabile di tipo "Struttura":
  p1 = VarPtr(vrSt)

' ' ' ' ' '

' Ora ri-otteniamo i valori presenti nella "Struttura"
' dereferenziando con i "Memory-Stream" il "Puntatore" prima creato:
  t = Memory p1 For Read

  Read #t, b
  Print b

  Seek #t, 2
  Read #t, sr
  Print sr

  Seek #t, 4
  Read #t, i
  Print i

  Seek #t, 8
  Read #t, l
  Print l

  Seek #t, 16
  Read #t, p2
  Print String@(p2)

  t.Close

End


Ottenere il puntatore di una variabile di tipo Struttura mediante il metodo Object.Address()

In particolare tale metodo ritorna l'indirizo di memoria dell'oggetto posto come parametro del metodo stesso, e si utilizzerà con la variabile di tipo Struttura con la seguente sintassi:

Object.Address(Variabile_Struttura) As Pointer

In questo caso è preferibile optare per la dichiarazione della variabile di tipo Struttura con la parola New:

Dim variabile_struttura As New STRUTTURA

Per vedere un esempio del suo uso si rinvia a questa pagina della WIKI.