第二部份,我不知道在第二部分里怎么写代码把c++的数组返回给java;
第二部分里有这样几句:/************** 这下面的代码是返回给java的数组,有些问题,请问怎么写才好????????       
      jcharArray  ret;
      ret= env->NewCharArray(env,10);
      env->SetCharArrayRegion(env, ret, 0, 10, (jchar *)body);
      return(ret);
 **********************/           

解决方案 »

  1.   

    问题没有出,就是上面的返回代码怎么表达,把字符数组给java.
      

  2.   

    第二部分这样改:
          jcharArray  ret;
          ret= env->NewCharArray(10);
          env->SetCharArrayRegion(ret, 0, 10, body);
          return ret ;
    只是在c++里调用JNI函数有点问题,不知道你看的是jdk第几版的书,还是看新书为好。
      

  3.   

    楼上哥们,还是有问题,返回的是乱码,
     如过body 是从java 里传过来的,如下:
    jchar *body = env>GetCharArrayElements(ja, 0);
    jcharArray  ret;
    ret= env->NewCharArray(len);
    env->SetCharArrayRegion(ret, 0, len, (jchar *)pp);
    return(ret);
    返回的就是正确的。但是如果是我自己定义的c++数组,就不好用,是乱码,如下:
    char *buf=new char[len];
    for(i=0;i<len;i++)
    {
      buf[i]=pp[i];
    }
    jcharArray  ret;
    ret= env->NewCharArray(len);
    env->SetCharArrayRegion(ret, 0, len, (jchar *)buf);
    return(ret);
    请问怎么改才好?
      

  4.   

    主要是java里的jchar是16位,而c++ 里的是8位,这转换很麻烦的
      

  5.   

    看了一下,不存在格式转换的问题,只需要在char和byte之间转换就行了。如下:
    DllSam.cpp:
    JNIEXPORT jbyteArray JNICALL Java_NativeDemo_test2
    ...
          return (jbyteArray)ret;
    ..
    }
    NativeDemo.java:
    ..
          byte[] c= ob.test2();
          for ( i=0; i<c.length; i++){ 
               System.out.println("array element"+i+ "=" + (char)c[i]); 
           } 
        }
          public native byte[] test2();
    ...