Я пытаюсь создать объект задания в C ++, вызывая функцию NewObjectA () с использованием API вызова JNI.Тем не менее, я не уверен, как я должен передавать аргументы в конструктор.Документация JNI API гласит:
jobject NewObjectA (JNIEnv * env, jclass clazz, jmethodID methodID, const jvalue * args);
NewObjectA
Программисты размещают всеаргументы, которые должны быть переданы конструктору в массиве аргументов jvalue, который следует сразу за аргументом methodID.NewObjectA () принимает аргументы в этом массиве и, в свою очередь, передает их методу Java, который программист хочет вызвать.
В моем случае конструктору требуются две передаваемые ему строки java.Поэтому я попробовал следующее:
jclass jcls_File = env->FindClass("java/io/File");
jmethodID File_constructor = env->GetMethodID(jcls_File, "<init>","(Ljava/lang/String;Ljava/lang/String;)V");
jstring home = ctojstring(env,"/home/workspace");
jstring filename = ctojstring(env,"mydatafile");
jvalue FileLocationParams[] = {home,filename}; // COMPILE ERROR HERE.
jobject MyDataFile = env->NewObjectA(jcls_File, File_constructor,FileLocationParams);
Где ctojstring - просто следующая функция:
jstring ctojstring(JNIEnv *env,std::string mystring){
return env->NewStringUTF(mystring.c_str());
}
Но когда я пытаюсь скомпилировать, я получаю следующую ошибку в Eclipse:
ошибка: неверное преобразование из 'jstring {aka _jstring *}' в 'jboolean {aka unsigned char}' [-fpermissive]
Есть мысли о том, почему это происходит?