Can C++ call Java code?

前端 未结 2 722
没有蜡笔的小新
没有蜡笔的小新 2020-12-11 03:06

I know that Java code can call C++ code through JNI. Is it possible, however, to call Java code from C++ again through JNI or with any other method?

相关标签:
2条回答
  • 2020-12-11 04:06

    Yep you certainly can. Here's an example:

    Here's the java file:

    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();
            }
        }
    }
    

    And heres some C++ that uses it:

    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 讨论(0)
  • 2020-12-11 04:08

    You can also use SWIG to automatically generate the JNI files. The setup can be a bit tricky but it's very useful when you have a lot of C++ code to expose

    http://www.swig.org/index.php

    0 讨论(0)
提交回复
热议问题