Differenze tra le versioni di "Scrivere una libreria esterna che ritorna un Vettore di tipo char"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
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.
Codice della libreria esterna in C:
+
Private Extern prova() As Pointer In "/tmp/libprovaC"
  char a[4];
+
 +
 +
'''Public''' Sub Main()
 +
 +
  Dim p As Pointer
 +
   
 +
  Creaso()
 +
 +
  p = prova()
 +
 +
  Print string@(p)
 
   
 
   
 +
'''End'''
 
   
 
   
  char *prova() {
+
  '''Private''' Procedure Creaso()
 
   
 
   
    a[0] = 'p';  <FONT color=blue>// assegna un carattere per ciascun elemento del vettore di tipo "chr"</font>
+
  File.Save("/tmp/libprovaC.c", "char a[4];\n\n" &
    a[1] = 'e';
+
                                "char *prova() {\n\n" &
    a[2] = 'r';
+
                                "  a[0] = 'p';  <FONT color=blue>// assegna un carattere per ciascun elemento del vettore di tipo \"chr\"</font>\n" &
    a[3] = 'a';
+
                                "  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}")
 
   
 
   
    return a;   <FONT color=blue>// ritorna l'indirizzo del vettore "a"</font>
+
   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"
Codice Gambas:
 
<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"
 
Private Extern prova() As Pointer
 
 
   
 
   
 
   
 
   
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim p As Pointer
+
   Dim s As String
 
   
 
   
   Shell "gcc -o /tmp/libprovaC.so " & Application.Path & "/libprovaC.c -shared -fPIC" Wait
+
   Creaso()
 
   
 
   
   p = prova()
+
   s = prova()
 
   
 
   
   Print string@(p)
+
   Print s
 
   
 
   
 
  '''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

.........