Jni 中如何将C/C++中的字符串通过JNI接口的形参传递回Java

dpstill 2016-03-14 07:49:13
请教高手们:


Java Jni 中,如何将C/C++中的字符串通过JNI接口的形参传递回Java

Java 调用:
Java code


String facestring ="wwwww";
nativeDetect(mNativeObj, imageGray.getNativeObjAddr(), f.getNativeObjAddr(), cc, str);





JNI 接口:

C/C++ code


JNIEXPORT void JNICALL Java_org_javaTracker_nativeDetect
(JNIEnv * jenv, jclass, jlong thiz, jlong imageGray, jlong f, jintArray bb, jstring str)
{

//在这里如何将字符串通过JNI接口的str传会java。

}

...全文
450 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
JayKingY 2018-09-19
  • 打赏
  • 举报
回复
return env->NewStringUTF(buff);
JavaPlus 2016-10-17
  • 打赏
  • 举报
回复
java code: public void printStrings(String string ){ Message msg = new Message(); msg.arg1 = MSG_GETASTRING_FROM_C_CODE; Bundle bundle = new Bundle(); bundle.putSerializable("string ", string ); msg.setData(bundle); Handler.sendMessage(msg); } c code: jmethodID method= (*env)->GetMethodID(env,claxx,"printStrings","(Ljava/lang/String;)V"); jstring charst = (*env)->NewStringUTF(env,"c字符串"); (*env)->CallVoidMethod(env,obj,method,charst);
tcmakebest 2016-03-15
  • 打赏
  • 举报
回复
个人认为用不了形参,楼主不妨用JSON字符串返回多个值,如果数据简单搞个分隔符也行.
dpstill 2016-03-15
  • 打赏
  • 举报
回复
引用 3 楼 tcmakebest 的回复:
这段代码就是返回 string 的.
	extern "C"
	{
		JNIEXPORT jstring JNICALL Java_com_example_hello_Native_md5
		  (JNIEnv * env, jclass obj, jstring str)
		{
			const char *text = env->GetStringUTFChars(str, JNI_FALSE);
			 MD5 iMD5;
	
			 iMD5.GenerateMD5((unsigned char *)text, strlen(text) );
			 char buff[33];
			 iMD5.ToString(buff, 33);
			 buff[32]='\0';
	
			 jstring res = env->NewStringUTF(buff);
			 env->ReleaseStringUTFChars(str, text);
	
			 return res;
		}
	}
高手, 我希望的不是返回值。我希望的是通过形参传递回去。 试想,如果我希望传回去多个字符串,用返回值就难搞了。
tcmakebest 2016-03-15
  • 打赏
  • 举报
回复
这段代码就是返回 string 的.
	extern "C"
	{
		JNIEXPORT jstring JNICALL Java_com_example_hello_Native_md5
		  (JNIEnv * env, jclass obj, jstring str)
		{
			const char *text = env->GetStringUTFChars(str, JNI_FALSE);
			 MD5 iMD5;
	
			 iMD5.GenerateMD5((unsigned char *)text, strlen(text) );
			 char buff[33];
			 iMD5.ToString(buff, 33);
			 buff[32]='\0';
	
			 jstring res = env->NewStringUTF(buff);
			 env->ReleaseStringUTFChars(str, text);
	
			 return res;
		}
	}
  • 打赏
  • 举报
回复
那就别用void了 JNIEXPORT jstring JNICALL Java_org_javaTracker_nativeDetect
dpstill 2016-03-15
  • 打赏
  • 举报
回复
此处有高手否?请指教!

80,472

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧