Scrivere una libreria esterna che chiama una funzione esterna puntata
Da Gambas-it.org - Wikipedia.
Versione del 22 mag 2014 alle 12:34 di Vuott (Discussione | contributi)
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)); }