Differenze tra le versioni di "Avviare con l'appoggio di una libreria esterna un semplice sorgente C senza compilarlo"

Da Gambas-it.org - Wikipedia.
 
(6 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
E' possibile lanciare un semplice codice sorgente, scritto in linguaggio C e <SPAN style="text-decoration:underline">non</span> compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine ''main()'' del predetto sorgente.
+
E' possibile lanciare un codice sorgente <SPAN style="text-decoration:underline">semplice</span>, scritto in linguaggio C e <SPAN style="text-decoration:underline">non</span> compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine "main()" del predetto sorgente.
  
 
+
Mostriamo un esempio pratico, ove il codice dell'applicativo Gambas sarà il seguente:
Mostriamo un esempio pratico supponendo che il codice sorgente, che chiameremo ''sorgente_C.c'', sia il seguente:
+
  Private Extern LanciaCodice(st As String) In "/tmp/libadhoc"
  #include <stdio.h>
 
 
   
 
   
 
   
 
   
  int i;
+
  Public Sub Main()
 
   
 
   
  void main(int argc, char **argv) {
+
  <FONT color=gray>' ''Va a generare il semplice codice sorgente scritto in C:''</font>
 +
  CreaSorgenteC()
 
   
 
   
    while (1) {
+
<FONT color=gray>' ''Va a generare la libreria esterna condivisa "libadhoc.so":''</font>
 +
  Creaso()
 +
 
 +
<FONT color=gray>' ''Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:''</font>
 +
  LanciaCodice("Testo qualsiasi")
 
   
 
   
      printf("%s %d\n", argv[0], i);
+
End
      sleep (1);
 
      i++;
 
 
   
 
   
    };
 
 
   
 
   
  }
+
  Private Procedure CreaSorgenteC()
 
 
 
 
La libreria esterna, che chiameremo "''libadhoc.c''" e che dovrà lanciare il predetto codice sorgente C, avrà il solo compito di chiamare la routine ''main()'' del codice sorgente in C, e pertanto avrà il seguente tenore:
 
#include "''percorso/del/file/sorgente/sorgente_C.c''"
 
 
   
 
   
 +
  File.Save("/tmp/sorgente_C.c", "#include <stdio.h>\n\n" &
 +
                                "int main() {\n" &
 +
                                "  printf(\"Questa è una prova !\");\n}")
 
   
 
   
  void LanciaCodice(char *s) {
+
  End
 
   
 
   
  main(0, &s);
 
 
   
 
   
}
+
  Private Procedure Creaso()
Questo codice della libreria esterna verrà posto nella cartella ''Dati'' del progetto Gambas.
 
 
 
 
 
Il codice dell'applicativo Gambas, invece, sarà il seguente:
 
  Private Extern LanciaCodice(st As String) In "/tmp/libadhoc"
 
 
   
 
   
 +
<FONT color=gray>' ''La libreria esterna, che chiameremo "libadhoc.c" e che dovrà lanciare il codice sorgente C, avrà il solo compito di chiamare la routine "main()" del codice sorgente in C, e pertanto avrà il seguente tenore:''</font>
 +
  File.Save("/tmp/libadhoc.c", "#include \"/tmp/sorgente_C.c\"\n\n" &
 +
                              "void LanciaCodice(char *s) {\n" &
 +
                              "  main(0, &s);\n}")
 
   
 
   
'''Public''' Sub Main()
+
   Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait
    
 
<FONT color=gray>' ''Generiamo la libreria esterna condivisa "libadhoc.so":''</font>
 
  Shell "gcc -o /tmp/libadhoc.so " & Application.Path &/ "libadhoc.c -shared -fPIC" Wait
 
 
 
<FONT color=gray>' ''Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:''</font>
 
  LanciaCodice("Testo qualsiasi")
 
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 17:09, 12 lug 2023

E' possibile lanciare un codice sorgente semplice, scritto in linguaggio C e non compilato, attraverso l'ausilio di un'apposita libreria esterna, la quale provvede ad invocare la routine "main()" del predetto sorgente.

Mostriamo un esempio pratico, ove il codice dell'applicativo Gambas sarà il seguente:

Private Extern LanciaCodice(st As String) In "/tmp/libadhoc"


Public Sub Main()

' Va a generare il semplice codice sorgente scritto in C:
 CreaSorgenteC()

' Va a generare la libreria esterna condivisa "libadhoc.so":
 Creaso()
 
' Mettiamo in moto l'intera procedura per lanciare il codice sorgente C non compilato:
 LanciaCodice("Testo qualsiasi")

End


Private Procedure CreaSorgenteC()

 File.Save("/tmp/sorgente_C.c", "#include <stdio.h>\n\n" &
                                "int main() {\n" &
                                "   printf(\"Questa è una prova !\");\n}")

End


Private Procedure Creaso()

' La libreria esterna, che chiameremo "libadhoc.c" e che dovrà lanciare il codice sorgente C, avrà il solo compito di chiamare la routine "main()" del codice sorgente in C, e pertanto avrà il seguente tenore:
 File.Save("/tmp/libadhoc.c", "#include \"/tmp/sorgente_C.c\"\n\n" &
                              "void LanciaCodice(char *s) {\n" &
                              "   main(0, &s);\n}")

 Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -fPIC" Wait

End