Differenze tra le versioni di "Scrivere una libreria esterna che chiama una funzione esterna puntata"

Da Gambas-it.org - Wikipedia.
Riga 13: Riga 13:
  
  
La libreria esterna, da noi scritta e che chiameremo ''libadhoc.c'', sarà la seguente:
+
La libreria esterna, da noi scritta e che chiameremo ''libadhoc.c'', sarà la seguente: |[[#Note|1]]|
 
  #include <stdio.h>
 
  #include <stdio.h>
 
  #include "''/percorso/del/file/sorgente_C.c''"
 
  #include "''/percorso/del/file/sorgente_C.c''"
Riga 37: Riga 37:
 
   
 
   
 
  '''End'''
 
  '''End'''
 +
 +
 +
 +
 +
=Note=
 +
[1] Il codice presente in questo esempio nel file ''sorgente_C.c'' può anche essere più semplicemente contenuto nella sola libreria condivisa .so, come segue:
 +
#include <stdio.h>
 +
 +
 +
<FONT color=#B22222>int (*po)(int)</font>);
 +
 +
 +
int Funzione_Puntata(int valore) {
 +
 +
  return valore + 1;
 +
 +
}
 +
 +
 +
void Chiamata_Funzione(int i) {
 +
 
 +
  po = Funzione_Puntata;  <FONT color=gray>//inizializzazione del Puntatore a funzione</font>
 +
 
 +
  printf("Valore ritornato dalla funzione-puntatore: %d\n", <FONT color=#B22222>(*po)(i)</font>);
 +
 +
}

Versione delle 12:34, 22 mag 2014

Una libreria esterna appositamente può essere scritta per utilizzare una funzione esterna puntata da un Puntatore.


Nel seguente esempio abbiamo un codice sorgente in linguaggio C, che chiameremo "sorgente_C.c", nel quale è presente la funzione che vogliamo utilizzare e che è puntata da un Puntatore a Funzione:

int (*po)(int);


int Funzione_Puntata(int valore) {

  return valore + 1;

}


La libreria esterna, da noi scritta e che chiameremo libadhoc.c, sarà la seguente: |1|

#include <stdio.h>
#include "/percorso/del/file/sorgente_C.c"


void Chiamata_Funzione(int i) {
 
  po = Funzione_Puntata;   //inizializzazione del Puntatore a funzione

  printf("Valore ritornato dalla funzione-puntatore: %d\n", (*po)(i));

}

Il codice sorgente della libreria esterna, da noi scritta, verrà posto nella cartella Dati del progetto Gambas.


L'applicativo Gambas sarà invece il seguente:

Private Extern Chiamata_Funzione(i As Integer) In "/tmp/libadhoc"

' Genera la libreria esterna condivisa da noi scritta:
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared  -fPIC" Wait

  Chiamata_Funzione(99)

End



Note

[1] Il codice presente in questo esempio nel file sorgente_C.c può anche essere più semplicemente contenuto nella sola libreria condivisa .so, come segue:

#include <stdio.h>


int (*po)(int));


int Funzione_Puntata(int valore) {

 return valore + 1;

}


void Chiamata_Funzione(int i) {
 
  po = Funzione_Puntata;   //inizializzazione del Puntatore a funzione
 
  printf("Valore ritornato dalla funzione-puntatore: %d\n", (*po)(i));

}