Differenze tra le versioni di "Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore"
Da Gambas-it.org - Wikipedia.
Riga 41: | Riga 41: | ||
" <FONT color=B22222>(*vettore[i])(n)</font>;\n}") | " <FONT color=B22222>(*vettore[i])(n)</font>;\n}") | ||
− | Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared | + | Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait |
'''End''' | '''End''' |
Versione delle 17:13, 6 dic 2021
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