Differenze tra le versioni di "Scrivere una libreria esterna che chiama funzioni esterne puntate contenute in un Vettore"
Da Gambas-it.org - Wikipedia.
(Creata pagina con 'Una libreria esterna appositamente può essere scritta per utilizzare due o più funzioni esterne puntate da un ''Puntatore'' contenute in un ''Vettore''. Nel seguente esemp...') |
|||
(5 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 2: | Riga 2: | ||
− | 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'': | + | 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); | 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> |
− | void (*vettore[2])() = {fun1, fun2}; | + | <FONT color=B22222>void (*vettore[2])() = {fun1, fun2}</font>; |
Riga 21: | Riga 21: | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
L'applicativo Gambas sarà invece il seguente: | L'applicativo Gambas sarà invece il seguente: | ||
Private Extern Chiamata_Funzione(fI As Integer, vI As Integer) In "/tmp/libadhoc" | Private Extern Chiamata_Funzione(fI As Integer, vI As Integer) In "/tmp/libadhoc" | ||
Riga 42: | Riga 27: | ||
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Va a generare la libreria esterna condivisa da noi scritta:''</font> |
− | + | Creaso() | |
− | + | Chiamata_Funzione(1, 80) | |
+ | '''End''' | ||
+ | |||
+ | '''Private''' Procedure Creaso() | ||
+ | |||
+ | File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" & | ||
+ | "#include \"<FONT color=green>''/percorso/del/file/sorgente_C.c''</font>\"\n\n" & | ||
+ | "void Chiamata_Funzione(int i, int n) {\n" & | ||
+ | " <FONT color=B22222>(*vettore[i])(n)</font>;\n}") | ||
+ | |||
+ | 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