Differenze tra le versioni di "Gestire un Puntatore con le funzioni esterne del API di Glib"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 5: Riga 5:
 
E' possibile creare e dereferenziare una variabile di tipo ''Puntatore'' che punta ad una variabile di tipo Intero (''Integer''), nonché modificare il valore contenuto da una varibile di tipo ''Intero'' puntata da un Puntatore.
 
E' possibile creare e dereferenziare una variabile di tipo ''Puntatore'' che punta ad una variabile di tipo Intero (''Integer''), nonché modificare il valore contenuto da una varibile di tipo ''Intero'' puntata da un Puntatore.
  
E' necessario avere installata e richiamare nel programma Gambas la libreria: ''libglib-2.0.so''
+
E' necessario avere installata e richiamare nel programma Gambas la libreria condivisa: "''libglib-2.0.so.0.7200.4'' ".
 
 
  
 
Mostriamo un esempio pratico, nel quale viene modificato il valore contenuto dalla variabile di tipo Intero puntata da un "Puntatore":
 
Mostriamo un esempio pratico, nel quale viene modificato il valore contenuto dalla variabile di tipo Intero puntata da un "Puntatore":
  Library "libglib-2.0"
+
  Library "libglib-2.0:0.7200.4"
 
   
 
   
 
  <FONT Color=gray>' ''void g_atomic_int_set (volatile gint *atomic, gint newval)''
 
  <FONT Color=gray>' ''void g_atomic_int_set (volatile gint *atomic, gint newval)''
Riga 25: Riga 24:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  p = Alloc(SizeOf(gb.Pointer), 1)
+
  p = Alloc(SizeOf(gb.Pointer), 1)
 
    
 
    
 
  <FONT Color=gray>' ''Modifichiamo il valore contenuto dalla variabile di tipo Intero puntata dal "Puntatore":''</font>
 
  <FONT Color=gray>' ''Modifichiamo il valore contenuto dalla variabile di tipo Intero puntata dal "Puntatore":''</font>
  g_atomic_int_set(p, 99999)
+
  g_atomic_int_set(p, 99999)
 
      
 
      
 
  <FONT Color=gray>' ''Dereferenziamo il "Puntatore" con la funzione di Glib:''</font>
 
  <FONT Color=gray>' ''Dereferenziamo il "Puntatore" con la funzione di Glib:''</font>
  i = g_atomic_int_get(p)
+
  i = g_atomic_int_get(p)
  Print i
+
  Print i
 
        
 
        
 
  <FONT Color=gray>' ''Per verifica, dereferenziamo il "Puntatore" con la funzione propria di Gambas:''</font>
 
  <FONT Color=gray>' ''Per verifica, dereferenziamo il "Puntatore" con la funzione propria di Gambas:''</font>
  Print Int@(p)
+
  Print Int@(p)
 
      
 
      
  Free(p)
+
  Free(p)
 +
  p = 0
 
    
 
    
 
  '''End'''
 
  '''End'''
Riga 45: Riga 45:
 
===Impostare a ''NULL'' il contenuto dell'area di memoria puntata da un ''Puntatore''===
 
===Impostare a ''NULL'' il contenuto dell'area di memoria puntata da un ''Puntatore''===
 
E' possibile impostare a ''NULL'' il contenuto dell'area di memoria puntata da una variabile di tipo ''Puntatore'' con la funzione ''g_nullify_pointer( )''.
 
E' possibile impostare a ''NULL'' il contenuto dell'area di memoria puntata da una variabile di tipo ''Puntatore'' con la funzione ''g_nullify_pointer( )''.
 
  
 
Mostriamo un esempio:
 
Mostriamo un esempio:
   Library "libglib-2.0"
+
   Library "libglib-2.0:0.7200.4"
 
   
 
   
 
  <FONT Color=gray>' ''void g_nullify_pointer (gpointer *nullify_location)''
 
  <FONT Color=gray>' ''void g_nullify_pointer (gpointer *nullify_location)''
Riga 59: Riga 58:
 
   Dim p As Pointer
 
   Dim p As Pointer
 
    
 
    
  p = Alloc("Questa è una prova.")
+
  p = Alloc("Questa è una prova.")
 
    
 
    
 
  <FONT Color=gray>' ''Verifichiamo "prima" dell'uso della funzione "g_nullify_pointer()":''</font>
 
  <FONT Color=gray>' ''Verifichiamo "prima" dell'uso della funzione "g_nullify_pointer()":''</font>
  Print String@(p), p
+
  Print String@(p), p
 
        
 
        
  <FONT Color=#B22222>g_nullify_pointer</font>(p)
+
  <FONT Color=#B22222>g_nullify_pointer</font>(p)
 
    
 
    
 
  <FONT Color=gray>' ''Verifichiamo "dopo" l'uso della funzione "g_nullify_pointer()":''</font>
 
  <FONT Color=gray>' ''Verifichiamo "dopo" l'uso della funzione "g_nullify_pointer()":''</font>
  Print String@(p), p
+
  Print String@(p), p
 
 
  Free(p)
 
 
    
 
    
 +
  Free(p)
 +
  p = 0
 +
 
  '''End'''
 
  '''End'''
 
  
  
  
 
=Riferimenti=
 
=Riferimenti=
* https://developer.gnome.org/glib/stable/glib-Atomic-Operations.html
+
* https://docs.gtk.org/glib/func.bit_storage.html?q=g_atomic
* https://developer.gnome.org/glib/stable/glib-Miscellaneous-Utility-Functions.html#g-nullify-pointer
+
* https://docs.gtk.org/glib/func.nullify_pointer.html

Versione attuale delle 08:17, 30 apr 2023

Con alcune risorse della libreria di Glib-2.0 è possibile gestire le variabili di tipo Puntatore.


Creare e Dereferenziare un Puntatore

E' possibile creare e dereferenziare una variabile di tipo Puntatore che punta ad una variabile di tipo Intero (Integer), nonché modificare il valore contenuto da una varibile di tipo Intero puntata da un Puntatore.

E' necessario avere installata e richiamare nel programma Gambas la libreria condivisa: "libglib-2.0.so.0.7200.4 ".

Mostriamo un esempio pratico, nel quale viene modificato il valore contenuto dalla variabile di tipo Intero puntata da un "Puntatore":

Library "libglib-2.0:0.7200.4"

' void g_atomic_int_set (volatile gint *atomic, gint newval)
' Sets the value of atomic to newval.
Private Extern g_atomic_int_set(atomic As Pointer, newval As Integer)

' gint g_atomic_int_get (const volatile gint *atomic)
' Gets the current value of atomic.
Private Extern g_atomic_int_get(atomic As Pointer) As Integer


Public Sub Main()
 
 Dim p As Pointer
 Dim i As Integer
 
 p = Alloc(SizeOf(gb.Pointer), 1)
  
' Modifichiamo il valore contenuto dalla variabile di tipo Intero puntata dal "Puntatore":
 g_atomic_int_set(p, 99999)
   
' Dereferenziamo il "Puntatore" con la funzione di Glib:
 i = g_atomic_int_get(p)
 Print i
     
' Per verifica, dereferenziamo il "Puntatore" con la funzione propria di Gambas:
 Print Int@(p)
   
 Free(p)
 p = 0
  
End


Impostare a NULL il contenuto dell'area di memoria puntata da un Puntatore

E' possibile impostare a NULL il contenuto dell'area di memoria puntata da una variabile di tipo Puntatore con la funzione g_nullify_pointer( ).

Mostriamo un esempio:

 Library "libglib-2.0:0.7200.4"

' void g_nullify_pointer (gpointer *nullify_location)
' Set the pointer at the specified location to NULL.
Private Extern g_nullify_pointer(nullify_location As Pointer)
 

Public Sub Main()
 
 Dim p As Pointer
 
 p = Alloc("Questa è una prova.")
  
' Verifichiamo "prima" dell'uso della funzione "g_nullify_pointer()":
 Print String@(p), p
     
 g_nullify_pointer(p)
  
' Verifichiamo "dopo" l'uso della funzione "g_nullify_pointer()":
 Print String@(p), p
  
 Free(p)
 p = 0

End


Riferimenti