Scrivere una libreria esterna che chiama una funzione puntata membro di una Struttura ed un'altra indipendente
Da Gambas-it.org - Wikipedia.
Versione del 26 mag 2014 alle 06:35 di Vuott (Discussione | contributi) (Creata pagina con 'Il seguente esempio è comprendia in sé il caso di una Funzione, puntata da un ''Puntatore a Funzione'' contenuto in una Struttura, e di una Funzione, puntata da un altro ''P...')
Il seguente esempio è comprendia in sé il caso di una Funzione, puntata da un Puntatore a Funzione contenuto in una Struttura, e di una Funzione, puntata da un altro Puntatore a Funzione indipendente.
Il codice relativo alle due Funzioni nel nostro esempio è contenuto tutto in una libreria esterna condivisa .so, da noi scritta e che chiameremo libadhoc.c, sarà la seguente:
#include <stdio.h> struct STRUTTURA { int (*a)(int); char *s; }; struct STRUTTURA variabile_struttura; int af (int); int bF (int); int Chiama_Funzione(int i) { variabile_struttura.a = af; /* Invoca la funzione puntata dal Puntatore a Funzione presente nella Struttura, e ritorna il risultato finale delle operazioni compiute dalle due Funzioni: */ return (*variabile_struttura.a)(i); } int af(int x) { int (*fp)(); printf("Valore di 'x' passato dal membro puntatore 'variabile_struttura.a': %d\n", x); fp = bF; // Inizializza il Puntatore a Funzione che punta alla Funzione bF return (*fp)(x + 1); // Invoca la funzione bF puntata dal Puntatore a Funzione } int bF (int y){ printf("Valore di y passato dalla funzione 'aF': %d (x + 1)\n", y); return y + y; }
L'applicativo Gambas sarà invece il seguente:
Library "/tmp/libadhoc" Private Extern Chiama_Funzione(i As Integer) As Integer Public Sub Main() Dim ris As Integer ' Genera la libreria esterna condivisa da noi scritta: Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait ris = Chiama_Funzione(99) Print "\nValore ritornato all'applicativo Gambas: "; ris End