Differenze tra le versioni di "Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore"

Da Gambas-it.org - Wikipedia.
 
Riga 37: Riga 37:
 
   
 
   
 
   File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
 
   File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
                 "#include "<FONT color=green>\''/percorso/del/file/sorgente_C.c''</font>\"\n\n" &
+
                 "#include \"<FONT color=green>''/percorso/del/file/sorgente_C.c''</font>\"\n\n" &
 
                 "void Chiamata_Funzione(int i, int n) {\n" &
 
                 "void Chiamata_Funzione(int i, int n) {\n" &
 
                 "  <FONT color=B22222>(*vettore[i])(n)</font>;\n}")
 
                 "  <FONT color=B22222>(*vettore[i])(n)</font>;\n}")

Versione attuale delle 18:48, 18 ago 2022

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