Scrivere una libreria esterna alla quale viene passata una stringa e che ritorna una stringa
Da Gambas-it.org - Wikipedia.
Versione del 6 dic 2021 alle 17:25 di Vuott (Discussione | contributi)
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 Gambas, contenente anche la parte per la creazione del codice C della libreria esterna, sarà il seguente: 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 ' Va a generare la libreria condivisa "libadhoc.so": Creaso() ' Per passare una stringa ad una funzione esterna, utilizzare 'alloc()': po = Alloc("Mu") s = riceve_passa(po) Print "---> "; s ' Dealloca l'area di memoria precedentemente riservata e si assicura che il Puntatore non punti ad un indirizzo di memoria rilevante: Free(po) po = 0 End Private Procedure Creaso() File.Save("/tmp/libadhoc.c", "#include <string.h>\n\n" & "char *r;\n" & "char t[2] = \"ca\";\n\n" & "char * riceve_passa(char * s) {\n\n" & " r = \"si\";\n" & " strcat(s,r);\n" & " strcat(s,t);\n\n" & " return s;\n}") Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait End