2012-01-24 15 views
8

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++?

+14

Non sapevo Silente è piaciuto programmazione :) –

+4

Ho sentito dire che è un mago la roba! – Luminously

+10

@Luminosamente ho visto il suo codice. È magico. – mcfinnigan

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

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

Problemi correlati