Differenze tra le versioni di "Scrivere una libreria esterna che ritorna un Vettore di tipo char"
Da Gambas-it.org - Wikipedia.
Riga 22: | Riga 22: | ||
<BR>Se la libreria esterna in C ritorna un vettore di tipo "''char''", allora in Gambas esso verrà recuperato e rappresentato da una variabile di tipo ''Puntatore'', che andrà poi dereferenziato al fine di recuperare i valori passati. | <BR>Se la libreria esterna in C ritorna un vettore di tipo "''char''", allora in Gambas esso verrà recuperato e rappresentato da una variabile di tipo ''Puntatore'', che andrà poi dereferenziato al fine di recuperare i valori passati. | ||
Library "/tmp/libprovaC" | Library "/tmp/libprovaC" | ||
+ | |||
+ | |||
Private Extern prova() As Pointer | Private Extern prova() As Pointer | ||
Riga 34: | Riga 36: | ||
Print string@(p) | Print string@(p) | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo ''Stringa'': | ||
+ | Library "/tmp/libprovaC" | ||
+ | |||
+ | |||
+ | Private Extern prova() As String | ||
+ | |||
+ | |||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim s As String | ||
+ | |||
+ | Shell "gcc -o /tmp/libprovaC.so " & Application.Path & "/libprovaC.c -shared -fPIC" Wait | ||
+ | |||
+ | s = prova() | ||
+ | |||
+ | Print s | ||
'''End''' | '''End''' |
Versione delle 16:36, 11 mag 2014
Di seguito è mostrato un esempio, nel quale la funzione esterna della libreria in C ritorna un Vettore di tipo "char".
Codice della libreria esterna in C:
char a[4]; char *prova() { a[0] = 'p'; // assegna un carattere per ciascun elemento del vettore di tipo "chr" a[1] = 'e'; a[2] = 'r'; a[3] = 'a'; return a; // ritorna l'indirizzo del vettore "a" }
Codice Gambas:
Se la libreria esterna in C ritorna un vettore di tipo "char", allora in Gambas esso verrà recuperato e rappresentato da una variabile di tipo Puntatore, che andrà poi dereferenziato al fine di recuperare i valori passati.
Library "/tmp/libprovaC" Private Extern prova() As Pointer Public Sub Main() Dim p As Pointer Shell "gcc -o /tmp/libprovaC.so " & Application.Path & "/libprovaC.c -shared -fPIC" Wait p = prova() Print string@(p) End
Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo Stringa:
Library "/tmp/libprovaC" Private Extern prova() As String Public Sub Main() Dim s As String Shell "gcc -o /tmp/libprovaC.so " & Application.Path & "/libprovaC.c -shared -fPIC" Wait s = prova() Print s End