Usare due programmi Gambas contemporaneamente mediante Process, lo standard Output e lo standard Input

Da Gambas-it.org - Wikipedia.
Versione del 25 gen 2013 alle 16:36 di Vuott (Discussione | contributi) (Nuova pagina: E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "''Process''". Facciamo...)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

E' possibile utilizzare due o anche più programmi Gambas contemporaneamente, che si passano valori attraverso lo standard Output e lo standard Input, mediante "Process".

Facciamo un esempio in cui abbiamo un programma principale ed uno secondario.

Avremo il programma principale che avvia il programma secondario (che chiameremo: secondo.gambas) e lo gestisce con Process. Il programma principale invia mediante Process un dato numerico al programma secondario. Il programma secondario intercetta quindi con l'evento _Read() il dato passato dallo standard Input, lo mostra in una TextLabel e lo modifica sommandolo ad un altro valore. Dopo ciò invierà il dato come modificato al programma principale mediante lo standard Output, il quale lo intercetterà mediante l'evento _Read() di Process.

Private scnd As Process


Public Sub Button1_Click()

' Avviamo il programma secondario e lo gestiamo con "Process":
    scnd = Exec ["percorso/secondo.gambas"] For Read Write As "secondo"

End


Public Sub Button1_Click()

' Inviamo al programma secondario il valore numerico:
   Write #scnd, 99 As Byte

End


' Se potrà essere letto almeno un byte dal processo "secondo", verrà sollevata questa subroutine:
Public Sub secondo_Read()

 Dim by As Byte

' Legge i dati scritti dal programma secondo:
   Read #scnd, by

 ' Qui mostriamo in console il dato intercettato:
   TextLabel1.Text = "Dato intercettato modificato = "; CStr(by)
 
End


Il programma secondario (chiamato: secondo.gambas) che intercetta attraverso lo standard Input il dato inviatogli, e lo re-invia - come modificato - al programma principale attraverso lo standard output, sarà questo:

Private flIn As File


Public Sub Form_Open()

' Apre lo standard Input per la lettura...
   flIn = Open "/dev/stdin" For Read Watch

End


Public Sub File_Read()

 Dim out As File
 Dim a, b As Byte

' Legge il dato passato dallo standard Input:
  Read #flIn, b

  flIn.Close

' Mostra nella propria TextLabel il dato intercettato:
  TextLabel1.Text = CStr(b)

' Effettua la modifica del dato intercettato:
  a = b + 1

 ' Apre lo standard Output per la Scrittura...
  out = Open "/dev/stdout" For Write

 ' ...e vi scrive il valore della variabile "a":
  Write #out, a As Byte

  out.Close

End



Al termine dell'intera procedura avremo nella TextLabel del programma secondario scritto il dato: 99, mentre nella TextLabel del programma principale scritto il dato come modificato: 100.