JNI开发-CC++调⽤Java静态函数参数和返回值均为String类型        C/C++调⽤Java函数参数和返回值均为String类型;
Java的CCallJavaTools类:
package com.niubashaoye.ndk.jni;
public class CCallJavaTools {
/**
* C/C++调⽤Java静态函数传递String参数并返回String类型值
* @param str
* @return
*/
public static String simpleStaticMethod(String str) {
return str + ",欢迎使⽤JNI开发!";
}
* C/C++调⽤Java静态函数传递String参数并返回String类型值
* @param str
* @return
*/
public static String simpleStaticMethod(String str) {
return str + ",欢迎使⽤JNI开发!";
}
}
Java调⽤C/C++传递参数:
Java的JNITools类中的native函数:
/
**
* 调⽤静态⽅法
*
* @param str
* @return
*/
public native String simpleStaticMethod(String str);
/**
* 调⽤静态⽅法
*
* @param str
* @return
*/c++string类型
public native String simpleStaticMethod(String str);
Java调⽤native:
JNITools jniTools=new JNITools();
String resultStr = jniTools.simpleStaticMethod("欧阳⽆敌");
C/C++函数调⽤Java函数:
/*
* Class:    Java_com_niubashaoye_ndk_jni_JNITools
* Method:    simpleStaticMethod
* Signature: (Ljava/lang/String;)Ljava/lang/String;
* 参数类型和返回值类型都是String的静态⽅法
*/
JNIEXPORT jstring JNICALL Java_com_niubashaoye_ndk_jni_JNITools_simpleStaticMethod(
JNIEnv *env, jobject obj, jstring str) {
//获取java传递的参数
const char *strCont = env->GetStringUTFChars(str, JNI_FALSE);
//通过反射获取java类
jclass ccallj = env->FindClass("com/niubashaoye/ndk/jni/CCallJavaTools");
//得到⽅法id
//参数列表:反射类,⽅法名称,⽅法签名
jmethodID methodId = env->GetStaticMethodID(ccallj, "simpleStaticMethod",
"(Ljava/lang/String;)Ljava/lang/String;");
//调⽤⽅法,CallStaticObjectMethod第⼀个参数是反射类名
jstring result = (jstring) env->CallStaticObjectMethod(ccallj, methodId,
env->NewStringUTF(strCont));
return result;
}
JNIEnv *env, jobject obj, jstring str) {
//获取java传递的参数
const char *strCont = env->GetStringUTFChars(str, JNI_FALSE);
//通过反射获取java类
jclass ccallj = env->FindClass("com/niubashaoye/ndk/jni/CCallJavaTools");
/
/得到⽅法id
//参数列表:反射类,⽅法名称,⽅法签名
jmethodID methodId = env->GetStaticMethodID(ccallj, "simpleStaticMethod",
"(Ljava/lang/String;)Ljava/lang/String;");
//调⽤⽅法,CallStaticObjectMethod第⼀个参数是反射类名
jstring result = (jstring) env->CallStaticObjectMethod(ccallj, methodId,
env->NewStringUTF(strCont));
return result;
}
执⾏流程:Java调⽤C/C++的SimpleStr函数并传递String参数,C/C++调⽤Java的CCallJavaTools类的SimpleStaticMethod ,并对参数进⾏追加返回给C/C++函数,C/C++函数⼜返回Java调⽤native函数;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。