Ciao a tutti volevo chiedervi se sapete se è possibile richiamare un programma in CPP da una classe Java, so che potrebbe essere possibile con la classe System ma non ho la più pallida idea di come si faccia
!
Grazie mille !!!
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Ciao a tutti volevo chiedervi se sapete se è possibile richiamare un programma in CPP da una classe Java, so che potrebbe essere possibile con la classe System ma non ho la più pallida idea di come si faccia
!
Grazie mille !!!
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Forse ti serve dare uno sguardo quiOriginariamente inviato da LèMomò
Ciao a tutti volevo chiedervi se sapete se è possibile richiamare un programma in CPP da una classe Java, so che potrebbe essere possibile con la classe System ma non ho la più pallida idea di come si faccia
!
Grazie mille !!!
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
ODDIO sembra un casino ...spero di riuscirci O.O grazie mille!
Il punto è charire cosa devi fare esattamente. Se devi semplicemente eseguire un programma esistente scritto in c++ (o anche in altri linguaggi) così come lo lanceresti con un doppio click è una cosa (e il link da seguire è quello che ti ho fornito), se invece devi scrivere un wrapper java per una libreria di funzioni native (sotto win una dll ad esempio) , allora devi usare le JNI e studiare quanto linkato da lolide. Nel secondo caso stai sostanzialmente esponendo al programma java dei metodi che non sono implementati in java puro ma in realtà richiamano delle funzioni implementato in un altro linguaggio (all'interno della dll).Originariamente inviato da LèMomò
ODDIO sembra un casino ...spero di riuscirci O.O grazie mille!
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Praticamente devo lanciare dei comandi dal una mia ipotetica interfaccia grafica in JAVA su un programma che è scritto in CPP che altrimenti eseguirei dal terminale ... ad esempio come lanciare un makefile!
Allora guardati la classe Runtime che ti ho linkato. CiaoOriginariamente inviato da LèMomò
Praticamente devo lanciare dei comandi dal una mia ipotetica interfaccia grafica in JAVA su un programma che è scritto in CPP che altrimenti eseguirei dal terminale ... ad esempio come lanciare un makefile!
Il centro dell'attenzione non è sempre un buon posto in cui trovarsi
Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)
Riprendo questa discussione perchè è proprio quello che sto cercando.Vi spiego:
Ammeto che è un progetto universitario, ma non so veramente dove sbattere la testa. Dobbiamo creare un applicazione, usando però le classi scritte in C++. Le classi sono gia tutte pronte. So di dover usare JNI, e so anche usarlo/applicarlo usando metodi statici nativi che richiamano una semplice funzione che ritorna un qualcosa. Il problema si pone nel momento in cui devo richiamare costruttori e richiamarci dei metodi. Leggendo in giro ho visto che l'approccio è diverso: Ho scritto delle classi Java con vari metodi nativi e altre cose (preso spunto da un libro); vi posto il codice di una classe chiamata JMoneyBox:
Ammetto che non ho ancora capito il senso di writeObject e readObject. Inoltre adesso sono fermo. Leggevo nel libro che c'è bisogno di interfacciare l'oggetto in Java a quello in C++, ciò viene fanno con la registrazione di puntatori in un registro, in modo che il garbage collector riconosce gli oggetti usati/superflui. Non ho però capito se questo registro devo farlo io a mano o è già implementato nel JNI. Inoltre, come faccio a collegare il tutto alla mia classe c++?codice:import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class JMoneyBox extends JObject implements Serializable { public native void setBalance(int aBalance); public native int getBalance(); private native void _jni_initialize(); JMoneyBox() { _jni_initialize(); } private native int _jni_delete(); protected void finalize() { _jni_delete(); } private native void _jni_clone(JMoneyBox aMoneyBox); public Object clone() throws CloneNotSupportedException { JMoneyBox moneyBox = (JMoneyBox) super.clone(); _jni_clone(moneyBox); return moneyBox; } private void writeObject(ObjectOutputStream out) throws IOException { out.writeUTF(Integer.toString(getBalance())); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { // Construct the C++ object _jni_initialize(); int i = Integer.parseInt(in.readUTF()); setBalance(i); } }