So che il codice Java può chiamare codice C++ tramite JNI. È possibile, tuttavia, richiamare nuovamente il codice Java da C++ tramite JNI o con qualsiasi altro metodo?È possibile chiamare il codice Java C++?
8
A
risposta
10
Sì, certo. Ecco un esempio:
Ecco il file java:
public class InvocationHelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
System.out.println("Arguments sent to this program:");
if (args.length == 0) {
System.out.println("(None)");
} else {
for (int i=0; i<args.length; i++) {
System.out.print(args[i] + " ");
}
System.out.println();
}
}
}
Ed ecco un po 'di C++ che lo utilizza:
void invoke_class(JNIEnv* env) {
jclass helloWorldClass;
jmethodID mainMethod;
jobjectArray applicationArgs;
jstring applicationArg0;
helloWorldClass = (env)->FindClass("InvocationHelloWorld");
if(! helloWorldClass)
{
std::cerr<<"Couldn't get \"InvocationHelloWorld\""<<std::endl;
return;
}
mainMethod = (env)->GetStaticMethodID(helloWorldClass, "main", "([Ljava/lang/String;)V");
if(! mainMethod)
{
std::cerr<<"Coulnd't get \"InvocationHelloWorld::main\""<<std::endl;
return;
}
applicationArgs = (env)->NewObjectArray(1, (env)->FindClass("java/lang/String"), NULL);
applicationArg0 = (env)->NewStringUTF("From-C-program");
(env)->SetObjectArrayElement(applicationArgs, 0, applicationArg0);
(env)->CallStaticVoidMethod(helloWorldClass, mainMethod, applicationArgs);
}
+0
Perfetto, grazie :-) –
4
È anche possibile utilizzare SWIG per generare automaticamente i file JNI. La configurazione può essere un po 'complicato, ma è molto utile quando si hanno un sacco di codice C++ per esporre
Problemi correlati
- 1. È possibile simboleggiare il codice C++?
- 2. Come chiamare il codice MATLAB da C?
- 3. È possibile chiamare una DLL C# da una DLL C?
- 4. È possibile l'iniezione di codice in Java?
- 5. È possibile chiamare un metodo anonimo in C#?
- 6. è possibile chiamare servlet java da ring/compojure?
- 7. Chiamare il codice C++ da un'applicazione C# o portarlo?
- 8. È possibile combinare il codice C89 con il codice C99?
- 9. È possibile chiamare una DLL gestita da C++ non gestito?
- 10. Modello C++ Metaprogrammazione - È possibile generare il codice generato?
- 11. È possibile formattare il codice C++ con VIM?
- 12. C# è possibile attivare l'evento button_click con il codice?
- 13. Come chiamare C++ da Java?
- 14. Eclipse: è possibile modificare il codice sorgente Java conosciuto tramite il codice sorgente "allegato"
- 15. È possibile chiamare una funzione R personalizzata (personalizzata) da C#?
- 16. È possibile chiamare una funzione C# da JavaScript?
- 17. Come chiamare un servlet da codice Java
- 18. Qual è l'equivalente Java per il seguente codice C#?
- 19. Come chiamare Java da C++ usando SWIG?
- 20. È possibile effettuare chiamate OpenGL ES dal proprio codice C++ e Java?
- 21. Java: è possibile disabilitare Ctrl-C nell'applicazione console Java?
- 22. È possibile utilizzare il codice rapido in Codename One codice nativo anziché Objective-C
- 23. Qual è il modo migliore per chiamare il codice Java da Python?
- 24. Chiamare il metodo C# all'interno di un programma Java
- 25. È possibile commentare il codice JSTL?
- 26. Perché è possibile chiamare il metodo sul metodo di interfaccia Java? [Paragonabile]
- 27. possibile convertire C# ottenere, impostare il codice per C++
- 28. Non è possibile impostare LD_LIBRARY_PATH per il processo Java
- 29. Come chiamare la funzione C# da java
- 30. Impossibile chiamare il codice C# da vbscript - Errore ActiveX
Non sapevo Silente è piaciuto programmazione :) –
Ho sentito dire che è un mago la roba! – Luminously
@Luminosamente ho visto il suo codice. È magico. – mcfinnigan