java调用c函数,
java定义:public native String get(int cmd);
c函数实现:
JNIEXPORT jstring JNICALL Java_com_unistrong_barcodetest_ReadService_get
(JNIEnv *env, jobject obj, jint cmd){
char* str;
str = barcode_Uart_Read(cmd);//这个没有问题,值为6298
jclass strClass = (*env)->GetObjectClass(env, obj);
jmethodID ctorID = (*env)->GetMethodID(env, strClass, "<get>", "(Ljava/lang/String;)V");
LOGD("ctorID===%s\n", ctorID);//打印NULL,为什么?
jbyteArray bytes = (*env)->NewByteArray(env, strlen(str));
LOGD("bytes===%s\n", bytes);//打印乱码,为什么?
(*env)->SetByteArrayRegion(env, bytes, 0, strlen(str), (jbyte*)str);
LOGD("str===%s\n", str);//没有执行,从这里开始就没有执行了,为什么,上面那句错了么?
jstring encoding = (*env)->NewStringUTF(env, "utf-8");
LOGD("encoding===%s\n", encoding);
return (jstring)(*env)->NewObject(env, strClass, ctorID, bytes, encoding);
}
java定义:public native String get(int cmd);
c函数实现:
JNIEXPORT jstring JNICALL Java_com_unistrong_barcodetest_ReadService_get
(JNIEnv *env, jobject obj, jint cmd){
char* str;
str = barcode_Uart_Read(cmd);//这个没有问题,值为6298
jclass strClass = (*env)->GetObjectClass(env, obj);
jmethodID ctorID = (*env)->GetMethodID(env, strClass, "<get>", "(Ljava/lang/String;)V");
LOGD("ctorID===%s\n", ctorID);//打印NULL,为什么?
jbyteArray bytes = (*env)->NewByteArray(env, strlen(str));
LOGD("bytes===%s\n", bytes);//打印乱码,为什么?
(*env)->SetByteArrayRegion(env, bytes, 0, strlen(str), (jbyte*)str);
LOGD("str===%s\n", str);//没有执行,从这里开始就没有执行了,为什么,上面那句错了么?
jstring encoding = (*env)->NewStringUTF(env, "utf-8");
LOGD("encoding===%s\n", encoding);
return (jstring)(*env)->NewObject(env, strClass, ctorID, bytes, encoding);
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货