Jni передать аргументы в функцию

128
02 июля 2019, 01:20

Есть java функция

public static String test(String a, Object... args) {
}

jni

jstring test(JNIEnv *env,char* str,jobject... args){
}

jni ругается на jobject... args.Как в jni сделать функцию с неограниченными аргументами?

Answer 1

Данный пример описывает приём параметров типа String

// Находим указатель на данный метод
mid = (*env)->GetStaticMethodID(env, class, "test", "(Ljava/lang/String;[Ljava/lang/Object;)V");
// Метод на С
static void test(JNIEnv * env, char* str, jobject o, ...) {
  int i = 0;
  int count = 0;
  char * msg[100+1] = {0};  // количество аргументов, максимум 100
  jobjectArray ja;
  va_list list;
  va_start(list, o);
  do {msg[count] = va_arg(list,char *);
  } while(msg[count] !=0 && ++count < 100);
  va_end(list);
  ja = (*env)->NewObjectArray(env, count, (*env)->FindClass(env, "java/lang/String"), (*env)->NewStringUTF(env, ""));
  for(i=0;i!=count;i++) {
    (*env)->SetObjectArrayElement(env,ja,i,(*env)->NewStringUTF(env, msg[i]));
  }
  (*env)->CallVoidMethod(env, o, mid, ja);
}

Пример вызова на C:

test(env, "MyName", o, "0", "a", "1", NULL);
READ ALSO
Добавление базы данных sqlite при сборке проекта

Добавление базы данных sqlite при сборке проекта

Вопрос таков,собрал проект с помощью мавен,получился jar with dependencies,из консоли intellej idea jar запускается и отлично работаетИз обычной виндовской...

117
почему foreach выходит не пройдя по всему HashMap?

почему foreach выходит не пройдя по всему HashMap?

если вместо while написать sout(a) то выводит все нужные ключи, а с while только первый попавшийся, подскажите что не так? то есть мне требуется вывести...

151
Generics и свой пример

Generics и свой пример

Просмотрел видео про Generic

116
Отображение графика LineChart

Отображение графика LineChart

возникла такая проблемаМне нужно нарисовать график по Машине Тьюринга(зависимость кол-ва шагов от длины слова), когда я пытаюсь его нарисовать...

110