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

Da Gambas-it.org - Wikipedia.
Versione del 16 mag 2014 alle 08:04 di Vuott (Discussione | contributi) (Creata pagina con 'Utilizzando una libreria esterna condivisa appositamente creata, è possibile richiamare ed utilizzare una funzione, presente in un codice sorgente in linguaggio C <SPAN style...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Utilizzando una libreria esterna condivisa appositamente creata, è possibile richiamare ed utilizzare una funzione, presente in un codice sorgente in linguaggio C non compilato, astraendola dal contesto del restante codice. Lo scopo quindi è di servirsi delle capacità di una determinata funzione presente in un codice sorgente in 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, che chiameremo "libadhoc.c" avrà il solo compito di invocare la predetta funzione calculus() del sorgente C, e pertanto avrà il seguente tenore:

#include "percorso/del/file/sorgente/sorgente_C.c"


int PassaValore(int i) {

  int c;
 
// Chiama la funzione "calculus()" presente nel sorgente C non compilato:
  c = calculus(i);
 
  return c;
  
}

Questo codice della libreria esterna verrà posto nella cartella Dati del progetto Gambas.


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

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


Public Sub Main()

 Dim i As Integer
 
' Generiamo la libreria esterna condivisa "libadhoc.so":
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait

' Mettiamo in moto l'intera procedura per invocare la funzione presente nel codice sorgente C non compilato:
  i = PassaValore(qui un numero qualsiasi)

' Mostra in console il valore come elaborato dalla funzione invocata presente nel codice sorgente C non compilato:
  Print i

End