JNI Что такое дескриптор метода для char [] (массив символов)? - PullRequest
3 голосов
/ 14 сентября 2011

Мой фрагмент кода класса JAVA. Я хочу получить доступ к методу getReg_chal () из моего C-файла, используя JNI:

public char[] getReg_chal() {
        return reg_chal;
    }

My C-файл выполняет некоторую операцию jni:

mid = (*env)->GetMethodID(env, info, "getReg_chal()", "()I");

mid = (*env)->GetMethodID(env, info, "getReg_chal()", ***);

Я хочу знать дескриптор метода для моего char [].Запись "() I" дает мне ошибку дескриптора фиктивного метода, поскольку () I используется для Int.Что бы я заполнил *.Помогите мне, пожалуйста.Заранее спасибо.

1 Ответ

3 голосов
/ 14 сентября 2011

Подпись метода будет "()[C".

Вы можете прочитать подробности здесь и здесь .

Чтобы вызвать метод с помощью идентификатора метода, вы просто напишите что-то вроде

jobject obj = ... // This is the object you want to call the method on
jcharArray arr = (jcharArray) (*env)->CallObjectMethod(env, obj, mid);
int count = (*env)->GetArrayLength(env, arr);
jchar* chars = (*env)->GetCharArrayElements(env, arr, 0);
// Here, "chars" is a C pointer to an array of "count" characters. It's NOT
// going to be 0-terminated, so be careful! Here's where you would do your
// logging or whatever. One possible way to do this is by turning the `jchar`
// array into a proper 0-terminated character string:
char * message = malloc(count + 1);
memcpy(message, chars, count);
message[count] = 0;
LOGD("NDK:LC: [%s]", message);

// When you're done you must call this!
(*env)->ReleaseCharArrayElements(env, arr, chars, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...