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

Da Gambas-it.org - Wikipedia.
 
Riga 25: Riga 25:
 
   
 
   
 
   
 
   
  '''Public''' Sub Main()
+
  Public Sub Main()
 
    
 
    
 
  <FONT color=gray>' ''Va a generare la libreria esterna condivisa da noi scritta:''</font>
 
  <FONT color=gray>' ''Va a generare la libreria esterna condivisa da noi scritta:''</font>
Riga 32: Riga 32:
 
   Chiamata_Funzione(1, 80)
 
   Chiamata_Funzione(1, 80)
 
      
 
      
  '''End'''
+
  End
 
   
 
   
  '''Private''' Procedure Creaso()
+
   
 +
Private Procedure Creaso()
 
   
 
   
 
   File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
 
   File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
Riga 43: Riga 44:
 
   Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait
 
   Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 19:32, 12 giu 2024

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