JNI передать по ссылке не удается - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть следующий код в Java:

class Foo {
   public native int bar(String name);

   public static void main(String[] args) {
     Foo fo = new Foo();
     String n = "Name1";
     fo.(n);
     System.out.println(n);
   }
}

А у меня в C:

    JNIEXPORT jint JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName
(JNIEnv *env, jobject obj, jstring name) {
      name = (*env)->NewStringUTF(env, "Name2");  
      return 0;
    }

Я предполагаю, что результат на экране должен быть Name2 Но это Name1

Ответы [ 2 ]

0 голосов
/ 17 февраля 2012

В коде C имя является локальной переменной.Изменение его не изменит строковый объект, на который он ранее указывал.Кроме того, строки Java являются неизменяемыми, поэтому вы не можете изменить объект.То, что вы могли бы сделать, это вернуть ссылку на новую строку, так как вы не используете целочисленное возвращаемое значение.

0 голосов
/ 17 февраля 2012

Строки неизменны.Почему бы просто не вернуть его вместо этого?

 public native String bar();

[..]

 JNIEXPORT jstring JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName
      (JNIEnv *env, jobject obj)
 {
     return (*env)->NewStringUTF(env, "Name2");  
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...