Passare a una funzione esterna il Puntatore di una Struttura, scritta in Gambas, ottenuto con la funzione VarPtr()
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