Ошибка создания массива аргументов Jvalues ​​для функции NewObjectA () — API вызова JNI

Я пытаюсь создать объект задания в C ++, вызывая функцию NewObjectA () с использованием API вызова JNI. Тем не менее, я не уверен, как я должен передавать аргументы в конструктор. Документация JNI API гласит:

jobject NewObjectA (JNIEnv * env, jclass clazz, jmethodID methodID, const
jvalue * args);

NewObjectA

Программисты помещают все аргументы, которые должны быть переданы
конструктор в массиве аргументов jvalues, который следует сразу за
Аргумент 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]

Есть мысли о том, почему это происходит?

1

Решение

jvalue имеет тип объединения.

И это заявлено следующим образом:

typedef union jvalue {
jboolean z;
jbyte    b;
jchar    c;
jshort   s;
jint     i;
jlong    j;
jfloat   f;
jdouble  d;
jobject  l;
} jvalue;

Если вы хотите назначить jstring в jvalue Вы могли бы сделать, как показано ниже.

jvalue FileLocationParams[2];
FileLocationParams[0].l = home;
FileLocationParams[1].l = filename;

Вместо

jvalue FileLocationParams[] = {home,filename};  // COMPILE ERROR HERE.

Как это будет пытаться назначить home а также filename первому члену jvalue который jboolean z,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]