简体   繁体   English

如何使用 JNI 从 C++ 向 CallObjectMethod 传递多个参数

[英]How to pass multiple arguments to CallObjectMethod from C++ using JNI

I am trying to pass three strings to a java static method using JNI but I couldn't find how to do it.我正在尝试使用 JNI 将三个字符串传递给 java 静态方法,但我找不到如何去做。 I am able to pass a single string as input, but it is not clear how to pass multiple parameters.Can you please help?我可以传递单个字符串作为输入,但不清楚如何传递多个参数。你能帮忙吗?

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM