Allora: intanto mi serve inviare i dati dal programma in C a Gambas, poi penserò al contrario.
Il problema deriva dal fatto che io ho le librerie in C (per un hardware custom specifico, e sono proprietarie).
Cosa intendete con la pipe "|"?
Io ho provato con questo in Gambas:
Shell (mioscript) wait to OutputText
inserito in un timer, ma i risultati sono terrificanti (lentissimo).
Pensavo che si potesse andare a leggere direttamente in memoria in qualche modo....
Allora, io ho un hardware custom su cui gira linux, la scheda mi trasmette 12'000 Bytes/secondo.
Io attualmente posso lavorare in 2 modi:
1) con script, che mi restituisce un risultato in formato testo (per esempio richiedo la trasmissione di 8 Bytes):
>ROT -getdata 8
00 00 00 00 00 00 00 00
>
e che gestivo in Gambas con:
Shell ("ROT -getdata 8) wait to MiaStringa
e poi andavo a elaborare il risultato contenuto nella stringa
Questa soluzione viene utilizzata giusto per esempio, perchè anche se inserisco il comando (in Gambas) in un ciclo while, la massima frequenza di esecuzione è di circa 10 Hertz.
2) con una libreria in C:
#include "ROTAS.h"
...
...
ROT_GetData (MyBuffer,8);
In questo modo riesco a richiamare la funzione anche 2000 volte al secondo.
Adesso la cosa "obbligata" mi sembra quella di trasmettere in qualche modo il buffer MyBuffer a Gambas.
Non ho idea di come fare, come soluzione ultima posso aspettare di accumulare abbastanza dati e scriverli in un file che poi andrò a elaborare con Gambas.
Semplicemente supponevo che ci fosse un modo di condividere direttamente una variabile in memoria....
2) con una libreria in C:
#include "ROTAS.h"
...
...
ROT_GetData (MyBuffer,8);
Adesso la cosa "obbligata" mi sembra quella di trasmettere in qualche modo il buffer MyBuffer a Gambas.
Il codice dell'applicativo in C dovrebbe avere alla fine, ovviamente, un
........
.......
ROT_GetData (MyBuffer,8);
return MyBuffer;
}
e la funzione Gambas che invoca la libreria C (purché, come già detto, sia una "libreria condivisa": nome_libreria.so), sia in grado di ricevere il valore ritornante dalla libreria C. :-\
Semplicemente supponevo che ci fosse un modo di condividere direttamente una variabile in memoria....
Non credo che i due programmi possano puntare al medesimo indirizzo di memoria mediante una variabile. Ricordo che io tentai di fare delle prove analoghe alle tue utilizzando anche variabili di tipo Pointer addirittura fra due applicativi Gambas, e non ho ottenuto risultati positivi.
Non so, poi, se con la Classe DBus sia possibile ottenere quello che tu vuoi; ...ma qui ci vorrebbe un intervento charificatore del nostro amico milio, che in questo forum è uno dei più esperti conoscitori di quella Classe.