我已经在Android中使用C实现了Jansson,并且创建了一个从json计算值并且在C中工作的函数,我尝试在NDK中使用该代码并使用JNI构建它没有错误,但是当我试图安排代码时使用JNI它给我指针错误warning: return from incompatible pointer type
。我已经读过我需要使用jlong作为指针,但我无法弄清楚它是如何工作的,这是我第一次使用它。
这是我的C 代码(没有错误和编译)
char *doCalc (char *invoice_str) {
json_error_t error;
json_t *invoice = json_loads (invoice_str, JSON_DISABLE_EOF_CHECK, &error);
...
char *result = json_dumps (json_data, JSON_PRESERVE_ORDER);
return result;
}
C代码安排使用JNI (给我错误警告:从不兼容的指针类型返回,如果我正确的是因为jchar)
JNIEXPORT jchar JNICALL *Java_com_example_test_doCalc (JNIEnv* env, jobject obj,char const *invoice_str) {
json_error_t error;
json_t *invoice = json_loads (invoice_str, JSON_DISABLE_EOF_CHECK, &error);
...
char *result = json_dumps (json_data, JSON_PRESERVE_ORDER);
return result;
}
然后在我的Activity中,我喜欢运行doCalc(charJ);
,charJ中有Json。然后,这将给我转储计算值。
此外,我可能会看到这完全错误,感谢任何帮助。
答案 0 :(得分:3)
尝试使用jstring而不是char *
JNIEXPORT jchar JNICALL * Java_com_example_test_doCalc(JNIEnv * env, jobject obj, jstring invoice_jstring) {
//convert invoice_jstring to char* link bellow
json_error_t error;
json_t * invoice = json_loads(invoice_str, JSON_DISABLE_EOF_CHECK, & error);
...
char * result = json_dumps(json_data, JSON_PRESERVE_ORDER);
return result;
}
将jstring转换为char *你可以使用这个答案: JNI converting jstring to char *