Differenze tra le versioni di "Richiamare con l'appoggio di una libreria esterna una funzione presente in un sorgente C"

Da Gambas-it.org - Wikipedia.
(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...')
 
 
Riga 1: Riga 1:
Utilizzando una libreria esterna condivisa appositamente creata, è possibile richiamare ed utilizzare una funzione, presente in un codice sorgente in linguaggio C <SPAN style="text-decoration:underline">non</span> 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.
+
Per richiamare ed utilizzare una funzione presente in un codice sorgente in linguaggio C <SPAN style="text-decoration:underline">non</span> 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.
 
La libreria esterna effettuerà solo e semplicemente la chiamata della funzione presente nel sorgente C non compilato.
Riga 25: Riga 25:
  
  
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:
+
La libreria esterna, ottenuta dal codice del sorgente C, sarà ad esempio, chiamata: "''libadhoc.c''" .
#include "percorso/del/file/sorgente/sorgente_C.c"
 
 
 
int PassaValore(int i) {
 
 
  int c;
 
 
 
<FONT color=gray>// Chiama la funzione "calculus()" presente nel sorgente C non compilato:</font>
 
  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:
 
Il codice dell'applicativo Gambas, invece, sarà il seguente:
  Private Extern PassaValore(v as Integer) As Integer In "/tmp/libadhoc"
+
  Private Extern Calculus(v as Integer) As Integer In "/tmp/libadhoc"
 
   
 
   
 
   
 
   
Riga 51: Riga 36:
 
   Dim i As Integer
 
   Dim i As Integer
 
    
 
    
  <FONT color=gray>' ''Generiamo la libreria esterna condivisa "libadhoc.so":''</font>
+
  <FONT color=gray>' ''Generiamo la libreria esterna condivisa "libadhoc.so" dal codice del sorgente C:''</font>
   Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait
+
   Shell "gcc -o /tmp/libadhoc.so ''/percorso/del/codice/sorgente/C'' -shared -fPIC" Wait
 
   
 
   
  <FONT color=gray>' ''Mettiamo in moto l'intera procedura per invocare la funzione presente nel codice sorgente C non compilato:''</font>
+
  <FONT color=gray>' ''Invocare la funzione esterna:''</font>
   i = PassaValore(''qui un numero qualsiasi'')
+
   i = Calculus(''qui un numero qualsiasi'')
 
   
 
   
  <FONT color=gray>' ''Mostra in console il valore come elaborato dalla funzione invocata presente nel codice sorgente C non compilato:''</font>
+
  <FONT color=gray>' ''Mostra in console il valore come elaborato dalla funzione esterna:''</font>
 
   Print i
 
   Print i
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione attuale delle 11:12, 9 lug 2015

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