2016-09-22 5 views
1

JNIを使​​用して3つの文字列をJava静的メソッドに渡そうとしていますが、それを行う方法が見つかりませんでした。私は入力として単一の文字列を渡すことができますが、複数のパラメータを渡す方法が明確ではありません。お手伝いできますか? `NativeTypeコール 方法(:[ドキュメント](http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html)から JNIを使​​用してC++からCallObjectMethodに複数の引数を渡す方法

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    JavaVM *vm; 
    JNIEnv *env; 
    JavaVMInitArgs vm_args; 
    JavaVMOption options[1]; 
    vm_args.version = JNI_VERSION_1_2; 
    vm_args.nOptions = 1; 

    options[0].optionString = "-Djava.class.path=C:\\Algorithm\\output"; 
    vm_args.options = options; 
    vm_args.ignoreUnrecognized = 1; 

    // Construct a VM 
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args); 

    jclass clazz_algo = env->FindClass("systems/DataExchange"); 
    if (env->ExceptionCheck()) { 
     return 1; 
    } 

    // init(String, String, String) 
    jmethodID initMethod = env->GetStaticMethodID(clazz_algo, "init", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); 

    //HOW DO I CALL initMethod with three strings as input? 

    // Shutdown the VM. 
    vm->DestroyJavaVM(); 
    return 0; 
} 
+1

プログラマ**メソッドに渡されるすべての引数を 'methodID'引数**の直後に置きます。' Call Method'ルーチンは、次のようにして呼び出されます:JNIEnv * env、jobject obj、 jmethodID methodID、これらの引数を受け取り、プログラマが呼び出したいJavaメソッドに渡します。 " – Michael

答えて

1
//HOW DO I CALL initMethod with three strings as input? 
// Those are created as example 
jstring str1=NewStringUTF(env, "Str1"); 
jstring str2=NewStringUTF(env, "Str2"); 
jstring str3=NewStringUTF(env, "Str3"); 

// C++ style 
env->CallStaticVoidMethod(clazz_algo, initMethod, str1,str2,str3); 
// ... or C-style 
CallStaticVoidMethod(env, clazz_algo, initMethod, str1,str2,str3); 
関連する問題