2012-01-13 11 views
3

可能性の重複:
How to access the Java method in a C++ application使用JARファイル++/C

私はC++プログラムでJARファイルを使用する必要があります。つまり、C++からJava関数を呼び出す必要があります。例えば、 Javaでは、2の整数を受け入れ、その戻り値を返す関数があります。この関数をC++から呼び出す必要があります。 ご案内ください ありがとうございます。あなたはのJava呼び出しAPIを使用する必要が

答えて

10

は、(そのリンクから)この例のコードは、Java仮想マシンにロードし、int引数でtestという名前の静的Javaメソッドを呼び出すためにそれを使用する方法を示しhere.を説明しましたクラスMainにあります。この例では、JARファイルへのパスは、vm_args.classpath変数を使用して設定されます。あなたは非静的メソッドを呼び出すしたい場合

#include <jni.h>  /* where everything is defined */ 
... 
JavaVM *jvm;  /* denotes a Java VM */ 
JNIEnv *env;  /* pointer to native method interface */ 
JDK1_1InitArgs vm_args; /* JDK 1.1 VM initialization arguments */ 
vm_args.version = 0x00010001; /* New in 1.1.2: VM version */ 
/* Get the default initialization arguments and set the class 
* path */ 
JNI_GetDefaultJavaVMInitArgs(&vm_args); 
vm_args.classpath = ...; 
/* load and initialize a Java VM, return a JNI interface 
* pointer in env */ 
JNI_CreateJavaVM(&jvm, &env, &vm_args); 
/* invoke the Main.test method using the JNI */ 
jclass cls = env->FindClass("Main"); 
jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V"); 
env->CallStaticVoidMethod(cls, mid, 100); 
/* We are done. */ 
jvm->DestroyJavaVM(); 

、コードがわずかに異なるだろう、とJava Native Interface tutorialの残りの部分は、あなたが知る必要があるすべてを説明しています。

+0

私はここでjavaクラスを使用していますが、jarファイルを含める必要があります – sachin

+0

私が言ったように、jarファイルへのパスに 'vm_args.classpath'変数を設定します。" ./libs/thejarfile。瓶 "。 JVMはjarファイル内でクラスを見つけます。複数のjarファイルをインクルードする必要がある場合、この変数は、コロン(UNIX)またはセミコロン(WINDOW)で区切られたjarファイル・パスのリストにする必要があります。 –

関連する問題