...nel caso di passaggio dell'array dalla libreria esterna a Gambas con la funzione "
return", bisognerà utilizzare in Gambas una variabile di tipo Puntatore, giacché Gambas riceve un array dalla libreria in C, che è in definitiva, come sappiamo, un Puntatore.
Esempio:
Library "/tmp/prova"
' char * vettore()
Private Extern vettore() As Pointer
Public Sub Main()
Dim p As Pointer
Creaso()
p = vettore()
' Legge i dati mediante l'apposita funzione di dereferenziazione e con l'aritmetica dei Puntatori:
Print Byte@(p)
Print Byte@(p + 1)
Print Byte@(p + 2)
End
Private Procedure Creaso()
File.Save("/tmp/prova.c", "char bibi[3];\n\n"
"char * vettore() {\n\n"
" bibi[0] = 11;\n"
" bibi[1] = 22;\n"
" bibi[2] = 33;\n\n"
" return bibi;\n\n"
"}")
Shell "gcc -o /tmp/prova.so /tmp/prova.c -fPIC -shared"
End