Scrivere una libreria esterna alla quale viene passata una stringa e che ritorna una stringa

Da Gambas-it.org - Wikipedia.

Vediamo un esempio in cui il codice Gambas invoca una funzione esterna presente in una libreria, scritta da noi e che chiameremo ad esempio: libadhoc.c, ed alla quale passa una stringa. La funzione esterna a sua volta passerà alla funzione chiamante di Gambas una stringa.


Il codice C della libreria esterna sarà il seguente:

#include <string.h>


   char *r;
   char t[2] = "ca";


   char * riceve_passa(char * s) {

   r = "si";

   strcat(s,r);
   strcat(s,t);
  
   return s;

}


Codice Gambas: Per passare una stringa ad una funzione esterna, bisognerà utilizzare la funzione alloc():

Private Extern riceve_passa(testo As Pointer) As String In "/tmp/libadhoc"


Public Sub Main()

 Dim s As String
 Dim po As Pointer


' Genera la libreria condivisa "libadhoc.so":
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait


' Per passare una stringa ad una funzione esterna, utilizzare 'alloc()':
  po = Alloc("Mu")
 
  s = riceve_passa(po)
   
  Print "---> "; s

  Free(po)

End