Передавая int из собственного кода (jni) в java, измените его в java и передайте обратно через аргументы - PullRequest
2 голосов
/ 19 октября 2011

У меня есть нить в моем родном коде (c ++), и эта нить вызывает функцию обратного вызова в java с переданным целым числом в аргументе. Функция обратного вызова в Java должна изменить это целое число и возвращает истину или ложь. Нативный код должен работать с новым (модифицированным) целым числом.

Пример кода:

C-код:

doSomething()
{
     int id = 5;
     callback_fct(&id)
}

callback_fct(int* id)
{
    jclass integerClass = (env)->FindClass("java/lang/Integer");
    jmethodID midConstructor = (env)->GetMethodID(integerClass, "<init>", "(I)V");
    jmethodID midIntValue = (env)->GetMethodID(integerClass, "intValue", "()I");
    jobject integerObject = (env)->NewObject(integerClass, midConstructor, *id);

            //id should be 5
    int res = env->CallIntMethod(appl_object, mid, integerObject);

    *id= env->CallIntMethod(integerObject, midIntValue);
            //id should be 99 now
}

Java-код:

private int callback( Integer ID)
{
    Log.i("JavaWrapper", "callback");
    Log.i("JavaWrapper", "Old ID: " + ID); //should be 5
    ID = 99;
    Log.i("JavaWrapper", "New ID: " + ID);  //should be 99
    return 0;
}

Может ли кто-нибудь дать мне короткий пример для этого?

Спасибо

...