Differenze tra le versioni di "Passare a una funzione esterna il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione VarPtr()"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "Se a una funzione esterna si intende passare il ''Puntatore'' di una Struttura, scritta in Gambas, ottenuto con la funzione "VarPtr()", anziché direttamente l'istanza della S...")
 
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Se a una funzione esterna si intende passare il ''Puntatore'' di una Struttura, scritta in Gambas, ottenuto con la funzione "VarPtr()", anziché direttamente l'istanza della Struttura medesima, bisognerà dichiarare l'Oggetto di tipo della Struttura, da passare, come ''Globale'' e usare la parola-chiave "Struct".
+
Se a una funzione esterna si intende passare il ''Puntatore'' di una Struttura, scritta in Gambas, ottenuto con la funzione "VarPtr()", anziché direttamente l'istanza della Struttura medesima, bisognerà dichiarare l'Oggetto di tipo della Struttura, da passare, come ''Globale'' e usare la parola-chiave "Struct" <SUP>&#091;[[#Note|nota 1]]&#093;</sup>, altrimenti si otterrà l'errore "''Tipo dati non supportato'' ".
  
 
Mostriamo un esempio astratto:
 
Mostriamo un esempio astratto:
  Private Extern FunzioneEsterna(p As <Font Color=green>Pointer</font>) <Font Color=gray>' ''Passa un Puntatore anziché l'Oggetto del tipo della Struttura''</font>
+
  Private Extern FunzioneEsterna(p As <Font Color=green>Pointer</font>) In "Libxxxx" <Font Color=gray>' ''Dichiara il passaggio di un Puntatore anziché l'Oggetto del tipo della Struttura''</font>
 
   
 
   
 
   
 
   
  Public Struct STRUTTURA
+
  Public Struct '''STRUTTURA'''
 
   b As Byte
 
   b As Byte
 
   c As Short
 
   c As Short
 
  End Struct
 
  End Struct
 
   
 
   
  Private variabile_struttura As <Font Color=red><B>Struct</b></font> STRUTTURA
+
  Private <Font Color=darkorange>variabile_struttura</font> As <Font Color=red><B>Struct</b></font> '''STRUTTURA'''
 +
 +
 +
Public Sub Main()
 +
 +
  FunzioneEsterna(<Font Color=blue><B>VarPtr</b></font>(<Font Color=darkorange>variabile_struttura</font>))
 +
 +
End
 +
 
 +
 
 +
 
 +
=Note=
 +
[1] Usando la parola-chiave "Struct", l'indirizzo di memoria che si ottiene con la funzione nativa "VarPtr()" è il medesimo che si ottiene (sempre usando "Struct") con il Metodo "Object.Data()".
 +
<BR>Inoltre, usando la parola-chiave "Struct", abbiamo che ciascun elemento di una delle due seguenti coppie ritorna il medesimo indirizzo di memoria dell'altro elemento di coppia:
 +
Public Struct AAAAAA
 +
  b As Byte
 +
  c As Short
 +
End Struct
 +
 +
Private a As '''Struct''' AAAAAA
 +
 
   
 
   
 
  Public Sub Main()
 
  Public Sub Main()
 
   
 
   
   FunzioneEsterna(<Font Color=blue><B>VarPtr</b></font>(variabile_struttura))
+
   Print a
 +
  Print Object.Address(a)
 +
 +
  Print VarPtr(a)
 +
  Print Object.Data(a)
 
   
 
   
 
  End
 
  End

Versione attuale delle 15:54, 3 mar 2025

Se a una funzione esterna si intende passare il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione "VarPtr()", anziché direttamente l'istanza della Struttura medesima, bisognerà dichiarare l'Oggetto di tipo della Struttura, da passare, come Globale e usare la parola-chiave "Struct" [nota 1], altrimenti si otterrà l'errore "Tipo dati non supportato ".

Mostriamo un esempio astratto:

Private Extern FunzioneEsterna(p As Pointer) In "Libxxxx" ' Dichiara il passaggio di un Puntatore anziché l'Oggetto del tipo della Struttura


Public Struct STRUTTURA
  b As Byte
  c As Short
End Struct

Private variabile_struttura As Struct STRUTTURA


Public Sub Main()

 FunzioneEsterna(VarPtr(variabile_struttura))

End


Note

[1] Usando la parola-chiave "Struct", l'indirizzo di memoria che si ottiene con la funzione nativa "VarPtr()" è il medesimo che si ottiene (sempre usando "Struct") con il Metodo "Object.Data()".
Inoltre, usando la parola-chiave "Struct", abbiamo che ciascun elemento di una delle due seguenti coppie ritorna il medesimo indirizzo di memoria dell'altro elemento di coppia:

Public Struct AAAAAA
  b As Byte
  c As Short
End Struct

Private a As Struct AAAAAA


Public Sub Main()

 Print a
 Print Object.Address(a)

 Print VarPtr(a)
 Print Object.Data(a)

End