JNI开发-C/C++调用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 String simpleStr(String str) {
		return str + ",你好!我是牛八少爷!";
	}
}

Java调用C/C++传递参数:

      Java的JNITools类中的native函数:

       /**
	 * 简单的参数和返回值都是String类型
	 * 
	 * @param str
	 * @return
	 */
	public native String simpleStr(String str);

        Java调用native:

JNITools jniTools=new JNITools();
String resultStr = jniTools.simpleStr("欧阳无敌");

 C/C++函数调用Java函数:

/*
 * Class:     Java_com_niubashaoye_ndk_jni_JNITools_simpleStr
 * Method:    simpleStr
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 * 参数类型和返回类型都是String的函数
 */
JNIEXPORT jstring JNICALL Java_com_niubashaoye_ndk_jni_JNITools_simpleStr(
		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");
	//实例化该类
	jobject jobj = env->AllocObject(ccallj);
	//得到方法id
	//参数列表:反射类,方法名称,方法签名
	jmethodID methodId = env->GetMethodID(ccallj, "simpleStr",
			"(Ljava/lang/String;)Ljava/lang/String;");

	//调用方法
	jstring result = (jstring) env->CallObjectMethod(jobj, methodId,
			env->NewStringUTF(strCont));

	return result;
}

执行流程:Java调用C/C++的SimpleStr函数并传递String参数,C/C++调用Java的CCallJavaTools类的SimpleStr,并对参数进行追加返回给C/C++函数,C/C++函数又返回Java调用native函数;


代码下载:https://download.csdn.net/download/niuba123456/10533304

 

 

 

代码下载:https://download.csdn.net/download/niuba123456/10533304

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值