PDA

View Full Version : [Java e C] - Chiamare programmi JNI con script


Unrue
14-12-2006, 10:45
Ho un problemino con JNI. So come chiamare direttamente un programma C da Java. Il problema è che il programma C, non va richiamato direttamente da JNI, in quanto c'è uno script che lo fa partire e gli passa i parametri. Se chiamo direttamenre lo script mediante la classe Runtime, il programma C funziona, ma non uso JNI. Per passare parametri Java, devo per forza usare JNI. Ho pensato di sostituirmi allo script cercando di fare quello che fa lui, solo che tale script ne richiama altri due e alla fine c'è un casino di cose che fa e non ci si capisce più nulla. Quindi in qualche modo devo far partire il programma da dentro JNI. JNi dovrebbe richiamare lo script passandogli i parametri, poi lo script manda i parametri al programma C ed infine in controllo ritorna a JNI. L'idea è questa, ma non so se è possibile farlo..

kingv
14-12-2006, 16:49
Se chiamo direttamenre lo script mediante la classe Runtime, il programma C funziona, ma non uso JNI. Per passare parametri Java, devo per forza usare JNI.


neanche quando chiami direttamente il programma C usi JNI.
JNI ti serve per richiamare librerie scritte e compilate in altri linguaggi (C, C++), direttamente dall'interno del tuo programma java, senza eseguire nuovi processi.

perchè dici che non puoi passare i parametri necessari allo script? se usi la classe Runtime puoi richiamare sia un eseguibile che uno script, passando i parametri che vuoi.

Unrue
14-12-2006, 20:13
Cioè, non è che non posso passare i parametri allo script, il problema è che non posso far avviare il programma direttamente dallo script, dovrebbe essere JNI a richiamarlo con la System.loadLibrary. Ma se JNi lo richiama direttamente, il programma c non riesce a partire in quanto non trova tutto il lavoro fatto dallo script.

andbin
14-12-2006, 21:30
Cioè, non è che non posso passare i parametri allo script, il problema è che non posso far avviare il programma direttamente dallo script, dovrebbe essere JNI a richiamarlo con la System.loadLibrary. Ma se JNi lo richiama direttamente, il programma c non riesce a partire in quanto non trova tutto il lavoro fatto dallo script.Come ti ha già detto kingv, JNI serve per eseguire codice nativo contenuto in una libreria dinamica (.dll su Window). E la libreria ovviamente va sviluppata in un modo ben preciso utilizzando le apposite API JNI.

Continui a parlare di uno script .... ma che tipo di script?? In che linguaggio: PHP? Python? WSH? Altro? E perché mai dovresti lanciarlo usando JNI?? Quali e quanti dati si aspetta questo script?? Se si aspetta dei dati passati sulla linea di comando non ti basta formattare questi dati, passarli al Runtime.exec() e basta???