Differenze tra le versioni di "Scrivere una libreria esterna che ritorna un Vettore di tipo char"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 1: | Riga 1: | ||
Di seguito è mostrato un esempio, nel quale la funzione esterna della libreria in C ritorna un Vettore di tipo "char". | Di seguito è mostrato un esempio, nel quale la funzione esterna della libreria in C ritorna un Vettore di tipo "char". | ||
− | + | 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. | |
− | + | Private Extern prova() As Pointer In "/tmp/libprovaC" | |
− | |||
− | + | '''Public''' Sub Main() | |
− | + | Dim p As Pointer | |
− | |||
− | |||
− | |||
− | + | Creaso() | |
− | + | p = prova() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Print string@(p) | ||
− | + | '''End''' | |
+ | '''Private''' Procedure Creaso() | ||
− | + | File.Save("/tmp/libprovaC.c", "char a[4];\n\n" & | |
+ | "char *prova() {\n\n" & | ||
+ | " a[0] = 'p'; <FONT color=blue>// assegna un carattere per ciascun elemento del vettore di tipo \"chr\"</font>\n" & | ||
+ | " a[1] = 'e';\n" & | ||
+ | " a[2] = 'r';\n" & | ||
+ | " a[3] = 'a';\n\n" & | ||
+ | " return a; <FONT color=blue>// ritorna l'indirizzo del vettore \"a\"</font>\n\n}") | ||
− | + | Shell "gcc -o /tmp/libprovaC.so /tmp/libprovaC.c -shared -fPIC" Wait | |
− | |||
− | Shell "gcc -o /tmp/libprovaC.so | ||
− | |||
− | |||
− | |||
− | |||
'''End''' | '''End''' | ||
Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo ''Stringa'': | Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo ''Stringa'': | ||
− | + | Private Extern prova() As '''String''' In "/tmp/libprovaC" | |
− | |||
− | |||
− | Private Extern prova() As String | ||
Riga 50: | Riga 39: | ||
Dim s As String | Dim s As String | ||
− | + | Creaso() | |
s = prova() | s = prova() | ||
Riga 57: | Riga 46: | ||
'''End''' | '''End''' | ||
+ | |||
+ | ......... |
Versione attuale delle 19:54, 5 dic 2021
Di seguito è mostrato un esempio, nel quale la funzione esterna della libreria in C ritorna un Vettore di tipo "char".
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.
Private Extern prova() As Pointer In "/tmp/libprovaC" Public Sub Main() Dim p As Pointer Creaso() p = prova() Print string@(p) End Private Procedure Creaso() File.Save("/tmp/libprovaC.c", "char a[4];\n\n" & "char *prova() {\n\n" & " a[0] = 'p'; // assegna un carattere per ciascun elemento del vettore di tipo \"chr\"\n" & " a[1] = 'e';\n" & " a[2] = 'r';\n" & " a[3] = 'a';\n\n" & " return a; // ritorna l'indirizzo del vettore \"a\"\n\n}") Shell "gcc -o /tmp/libprovaC.so /tmp/libprovaC.c -shared -fPIC" Wait End
Più semplicemente, però, potrà essere anche recuperato e rappresentato da una variabile di tipo Stringa:
Private Extern prova() As String In "/tmp/libprovaC" Public Sub Main() Dim s As String Creaso() s = prova() Print s End .........