JNI, как получить значения обновляются в int и двойных полях - PullRequest
1 голос
/ 09 февраля 2012

Как два значения, которые я передаю в мой JNI, передаются в C, затем C вносит свои изменения и обновляет значения.Как мне получить эти два значения (maxPower, index) и посмотреть потом в Java?Они всегда возвращаются как ноль.

JNIEXPORT jdouble JNICALL Java_com_TV (
     JNIEnv* env, jobject obj, jdouble maxPower, jint index)
{
    jdouble result = 0;

    result = Feature_TV(2, &maxPower, &index );

    return result;
}

// здесь функция c, которую она вызывает, на самом деле делает больше, чем эта, но для // демонстрации она должна возвращать результат 60, а maxPower и index должны быть -5.0, а-2 ..

double Feature_TV(double * maxPwr, int * maxPwrIdx ) {

    *maxPwr = -5.0;
    *maxPwrIdx = -2;

    /// do something 

     return 60;
}

1 Ответ

3 голосов
/ 09 февраля 2012

Нет способа изменить переменные, которые передаются в Java_com_TV, потому что C передается по значению, как и Java.Когда вы вызываете Feature_TV и передаете адреса maxPower и index, адреса имеют локальные переменные в Java_com_TV, и никакого внешнего эффекта не видно.

Для выполнениято, что вы хотите сделать, вы можете либо

  1. заставить com.TV принять объект, имеющий maxPower и index в качестве полей, и изменить поля из JNI, либо
  2. заставить его вернутьобъект и создать объект и установить поля в JNI.
...