赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
JNI常见的几种类型传参
提示:以下是本篇文章正文内容,下面案例可供参考
java中的int和c++中的int类型一致,可以直接使用。
JNIEXPORT jint JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api
(JNIEnv *env, jobject obj, jint j_a, jint j_b){
int a = (int)j_a;
int b = (int)j_b;
__android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI a= %d b= %d",a,b);
return (jint)(a+b);
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
JNIEXPORT jboolean JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api2
(JNIEnv *env, jobject obj, jboolean jbool){
bool arg_bool = (jbool == JNI_TRUE)? true: false;
__android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI bool %s",
(arg_bool == true)? "true":"false");
return (arg_bool == true)? JNI_TRUE:JNI_FALSE;
}
JNIEXPORT jstring JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api3 (JNIEnv *env, jobject obj, jstring str1, jstring str2) { //java中string类,所以不能直接转成C++方式 const char *c_str1 = NULL; const char *c_str2 = NULL; //如果填写false,则是直接指向存放字符的地址,如果填写ture,则重新拷贝复制一份。 c_str1 = env->GetStringUTFChars(str1, 0); __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI string1 %s", c_str1); //释放java传递过来的jstring里面的在堆上开辟的字符串空间 env->ReleaseStringUTFChars(str1, c_str1); jboolean jb = JNI_FALSE; c_str2 = env->GetStringUTFChars(str2, &jb); __android_log_print(ANDROID_LOG_ERROR, "TEST", "JNI string2 %s", c_str2); env->ReleaseStringUTFChars(str2, c_str2); jstring ret = env->NewStringUTF("Jni return String"); return ret; }
JNIEXPORT void JNICALL Java_com_example_obo_OBOJNI_test_1jni_1api4
(JNIEnv *env, jobject obj, jintArray jarray)
{
//获取java中数组的首地址,填0是不拷贝
jint *pia = env->GetIntArrayElements(jarray, 0);
//得到数组长度
jsize array_len = env->GetArrayLength(jarray);
//使用 pia
for (int i = 0; i <array_len ; ++i) {
__android_log_print(ANDROID_LOG_ERROR, "TEST", "array[%d] %d", i, pia[i]);
}
//释放java中的数组,0为是否为拷贝
env->ReleaseIntArrayElements(jarray,pia,0);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。