Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore

Da Gambas-it.org - Wikipedia.

Una libreria esterna appositamente può essere scritta per utilizzare due o più funzioni esterne puntate da un Puntatore contenute in un Vettore.


Nel seguente esempio abbiamo un codice sorgente in linguaggio C, che chiameremo "sorgente_C.c ", nel quale sono presenti due o più funzioni da utilizzare, puntate ciascuna da un Vettore del tipo Puntatore a Funzione:

void fun1(int), fun2(int);

/* Inizializzazione esplicita del Vettore di Puntatori a Funzione */
void (*vettore[2])() = {fun1, fun2};


void fun1(int i) {

   printf("--->%d\n", i * 10);

}


void fun2(int i) {

   printf("--->%d\n", i + 10);

}

L'applicativo Gambas sarà invece il seguente:

Private Extern Chiamata_Funzione(fI As Integer, vI As Integer) In "/tmp/libadhoc"


Public Sub Main()
  
' Va a generare la libreria esterna condivisa da noi scritta:
 Creaso()
 
 Chiamata_Funzione(1, 80)
   
End

Private Procedure Creaso()

 File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
               "#include \"/percorso/del/file/sorgente_C.c\"\n\n" &
               "void Chiamata_Funzione(int i, int n) {\n" &
               "   (*vettore[i])(n);\n}")

 Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait

End