Differenze tra le versioni di "Scrivere una libreria esterna alla quale viene passata una stringa e che ritorna una stringa"

Da Gambas-it.org - Wikipedia.
(Creata pagina con '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 pass...')
 
Riga 10: Riga 10:
 
   
 
   
 
   
 
   
char * p(char * s) {
+
    char * p(char * s) {
 
   
 
   
 
     r = "si";
 
     r = "si";

Versione delle 16:14, 11 mag 2014

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 * p(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 Passa_Riceve(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 = Passa_Riceve(po)
   
  Print "---> "; s

  Free(po)

End