Передача массива строк из файла .c в java dll через JNI - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь получить C # для создания экземпляра класса в моей Java-программе.У меня было несколько простых примеров работы, но я столкнулся с проблемой, что мой класс Java принимает массив строк в качестве конструктора.

Мой вопрос заключается в том, как в файле .c создать массив строк, который затем можно передать классу java?

В ту минуту, когда мне удалось передать одинjString объект.

Вот метод в моем файле .c.

jobject newClassInstance()
{

    jmethodID MID_init;
    jobject obj;
    jstring name;
    jobjectArray ret;

    MID_init = (*env)->GetMethodID (env, jClass, "<init>", "([Ljava/lang/String;)V");
    if (!MID_init) {
        printf("Error: dllClass.<init>() not found\n");
        return NULL;
    }

    name = (*env)->NewStringUTF(env,"Moo");




    obj = (*env)->NewObject(env, jClass, MID_init, name);
    if (!obj) {
        printf("Error: failed to allocate an object\n");
        return NULL;
    }
    return obj;
}

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

С уважением

Ясень

1 Ответ

5 голосов
/ 28 июня 2011
  • Сначала создайте массив строк.
  • Создайте каждую элементную строку.
  • Вызов инициализатора Java с объектом Array.

Пример кода:

jobjectArray stringArray;
jString tmp;
char *stringA = "Test1";
char *stringB = "Test2";
jclass clsString; 
jint size = 2;

clsString = (*env)->FindClass(env, "java/lang/String");
stringArray = (*env)->NewObjectArray(env, size, clsString, 0);

tmp = (*env)->NewStringUTF(env, stringB);
(*env)->SetObjectArrayElement(env, stringArray, 0, tmp);

tmp = (*env)->NewStringUTF(env, stringA);
(*env)->SetObjectArrayElement(env, stringArray, 1, tmp);

obj = (*env)->NewObject(env, jClass, MID_init, stringArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...