Scrivere una libreria esterna che ritorna un Vettore di tipo char

Da Gambas-it.org - Wikipedia.

Di seguito è mostrato un esempio, nel quale la funzione esterna della libreria in C ritorna un Vettore di tipo "char".

Se la libreria esterna in C ritorna un vettore di tipo "char", allora in Gambas esso verrà recuperato e rappresentato da una variabile di tipo Puntatore, che andrà poi dereferenziato al fine di recuperare i valori passati.

Private Extern prova() As Pointer In "/tmp/libprovaC"


Public Sub Main()

 Dim p As Pointer

 Creaso()

 p = prova()

 Print string@(p)

End

Private Procedure Creaso()

 File.Save("/tmp/libprovaC.c", "char a[4];\n\n" &
                               "char *prova() {\n\n" &
                               "   a[0] = 'p';   // assegna un carattere per ciascun elemento del vettore di tipo \"chr\"\n" &
                               "   a[1] = 'e';\n" &
                               "   a[2] = 'r';\n" &
                               "   a[3] = 'a';\n\n" &
                               "   return a;   // ritorna l'indirizzo del vettore \"a\"\n\n}")

 Shell "gcc -o /tmp/libprovaC.so /tmp/libprovaC.c -shared -fPIC" Wait

End

Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo Stringa:

Private Extern prova() As String In "/tmp/libprovaC"


Public Sub Main()

 Dim s As String

 Creaso()

 s = prova()

 Print s

End

.........