Как использовать JNI для вызова метода JAVA из C
Я хочу использовать JNI (собственный интерфейс Java) для вызова определенного метода установки Java, передавая короткий буфер [] в качестве параметра.
Реализация метода Java выглядит следующим образом:
public void setPcmLeft(short[] data) { pcm_l = data; }
Изнутри моей функции C, как я могу вызвать этот метод, используя JNI.
Мой код в настоящее время выглядит так:
void Java_com_companyName_lame_LameActivity_lameDecode(JNIEnv *env, jobject jobj)
{
jclass class = (*env)->GetObjectClass(env, jobj);
if (class != NULL) {
jmethodID setLeftDatatID = (*env)->GetMethodID(env, class, "<setPcmLeft>", "void(V)");
if (setLeftDatatID == NULL) {
LOGD("(Lame) No method setLeftData");
}
}
}
Когда я запускаю это, setLeftDataID
это успокаивает NULL
,
Обратите внимание, что jobj
параметр мой объект передается в котором содержится setPcmLeft
реализация.
2 ответа
В призыве к GetMethodID()
имя метода не нуждается в угловых скобках, а подпись должна соответствовать методу Java.
jmethodID setLeftDatatID = (*env)->GetMethodID(env, class, "setPcmLeft", "([S)V");
В общем, подпись имеет вид ( arg-types ) ret-type
закодировано как указано в ссылке ниже. Аргумент короткий [], закодированный как [S
, Тип возврата V
для пустоты.
Более подробная информация доступна в главе 3 руководства Oracle JNI.
Попробуй это:
jmethodID midCallBack = (*env)->GetMethodID(env, class, "setPcmLeft", "([S)V");