前面提到JNI主要是可以完成Java调用C++/C函数,C++/C也可以调用Java方法。先看Java调用C++/C函数。

下面先看java接口参数是String类型(入参)

example:

Java interface  

      public void setName(String name);

 JNI file:

JNIEXPORT void JNICALL Java_setName_ 1native (JNIEnv *env, jclass thiz, jstring name)

 {      

                const char* str;

                jboolean isCopye = false;

            /* 把传进来的jstring类型转为utf-8类型,JNI中只识别编码方式是UTF-8的 */

              str = env->GetStringUTFChars(name, &isCopye);

       …….

/* 注意使用完了最好JVM释放转换成UTF-8的  string的对象的空间,如果不显示的调用的话,JVM中会一直保存 该对象,不会被垃圾回收器回收,可能就会导致内存溢出。 */

env->ReleaseStringUTFChars(name, str);


}