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

Da Gambas-it.org - Wikipedia.
Riga 5: Riga 5:
 
  void fun1(int), fun2(int);
 
  void fun1(int), fun2(int);
 
   
 
   
  <FONT color=gray>/* Vettore di Puntatori a Funzione */</font>
+
  <FONT color=gray>/* Inizializzazione esplicita del Vettore di Puntatori a Funzione */</font>
 
  <FONT color=B22222>void (*vettore[2])() = {fun1, fun2}</font>;
 
  <FONT color=B22222>void (*vettore[2])() = {fun1, fun2}</font>;
 
   
 
   

Versione delle 20:42, 16 mag 2014

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);

}


La libreria esterna, da noi scritta e che chiameremo libadhoc.c, sarà la seguente:

#include <stdio.h>
#include "/percorso/del/file/sorgente_C.c"


void Chiamata_Funzione(int i, int n) {

  (*vettore[i])(n);

}

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(fI As Integer, vI As Integer) In "/tmp/libadhoc"


Public Sub Main()
  
' Genera la libreria esterna condivisa da noi scritta:
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared  -fPIC" Wait
 
  Chiamata_Funzione(1, 80)
   
End