Differenze tra le versioni di "Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore"
Da Gambas-it.org - Wikipedia.
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
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= | + | "#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}") | ||
− | 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 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