Richiamare con l'appoggio di una libreria esterna una funzione presente in un sorgente C

Da Gambas-it.org - Wikipedia.

Per richiamare ed utilizzare una funzione presente in un codice sorgente in linguaggio C non compilato, sarà necessario trasformare detto codice sorgente C in un'apposita libreria dinamica condivisa .so. Lo scopo quindi è di servirsi delle capacità di una determinata funzione presente in un codice sorgente in C, astraendola così dal contesto del restante codice C.

La libreria esterna effettuerà solo e semplicemente la chiamata della funzione presente nel sorgente C non compilato.


Mostriamo un esempio pratico supponendo che il file del codice sorgente, che chiameremo sorgente_C.c, sia il seguente, e che intendiamo utilizzare la funzione "calculus()":

int main(int i) {

   int moltiplicato;

   moltiplicato = calculus(i + 10);

   return moltiplicato;

}



int calculus(int c) {

  return c * 10;

}

Noi intendiamo utilizzare solamente la funzione qui chiamata calculus().


La libreria esterna, ottenuta dal codice del sorgente C, sarà ad esempio, chiamata: "libadhoc.c" .


Il codice dell'applicativo Gambas, invece, sarà il seguente:

Private Extern Calculus(v as Integer) As Integer In "/tmp/libadhoc"


Public Sub Main()

 Dim i As Integer
 
' Generiamo la libreria esterna condivisa "libadhoc.so" dal codice del sorgente C:
  Shell "gcc -o /tmp/libadhoc.so /percorso/del/codice/sorgente/C -shared -fPIC" Wait

' Invocare la funzione esterna:
  i = Calculus(qui un numero qualsiasi)

' Mostra in console il valore come elaborato dalla funzione esterna:
  Print i

End