Sé que el código Java puede llamar al código C++ a través de JNI. ¿Es posible, sin embargo, llamar al código Java desde C++ nuevamente a través de JNI o con cualquier otro método?¿Puede C++ llamar código Java?
8
A
Respuesta
10
Sí, ciertamente puede. He aquí un ejemplo:
Aquí está el archivo 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();
}
}
}
Y aquí está un poco de C++ que utiliza:
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
Perfecto, gracias :-) –
4
También puede utilizar el TRAGO para generar automáticamente los archivos JNI. La configuración puede ser un poco complicado, pero es muy útil cuando se tiene una gran cantidad de código C++ para exponer
Cuestiones relacionadas
- 1. ¿Llamar al código C# de Java?
- 2. ¿Cómo llamar código Java desde C#?
- 3. Llamar código F # de C#
- 4. Llamar código fortran desde C#
- 5. llamar a código C++ de c
- 6. ¿Llamar al código de Scala desde Java?
- 7. Llamar código Java no nativo de Python
- 8. NoSuchMethodError al llamar código java de Scala
- 9. Llamar a cualquier método Java desde C#
- 10. Llamar código python (archivos .py) desde C#
- 11. ¿Cómo llamar a C++ desde Java?
- 12. ¿Es posible llamar al código C++ desde C#?
- 13. llamar código de C++ no administrado desde C# usando pinvoke
- 14. Métodos de llamada C del código C++/Java/C#?
- 15. ¿Qué tipo de código se puede llamar "reentrante"?
- 16. No se puede llamar al código C# de vbscript - Error de ActiveX
- 17. ¿Alguien puede explicar este código de Java
- 18. ¿Puede Java ejecutar un código scala compilado?
- 19. Cómo llamar al código de MATLAB desde C?
- 20. ¿Cómo puedo llamar al código .NET de Java?
- 21. Cómo llamar a un servlet desde el código Java
- 22. Llamar a una página web desde C# en el código
- 23. Fuga de memoria al llamar al código java desde C usando JNI
- 24. C++: ¿funciones virtuales que necesitan llamar al mismo código?
- 25. JD Edwards ... ¿llamar a C#?
- 26. Llamar a Java desde Python
- 27. Pruebas unitarias Código C++ utilizando Java
- 28. Cómo llamar a la funcionalidad C++ desde java
- 29. ¿Cómo puedo llamar al código .NET (C#/vb.net) de vbScript?
- 30. ¿Puede un constructor llamar a otro constructor en C++?
No sabía que Dumbledore le gusta la programación :) –
He oído que es un mago en la materia! – Luminously
@Luminously He visto su código. Es mágico. – mcfinnigan