gpt4 book ai didi

android - 使用 JNI 将 Json char 传递给 C 以获取计算值的 Jansson 转储,指针问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:15:40 27 4
gpt4 key购买 nike

我已经在 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 code Arranged to work with 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。然后会给我转储计算值。

此外,我可能完全看错了,感谢任何帮助。

最佳答案

尽量用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 *

关于android - 使用 JNI 将 Json char 传递给 C 以获取计算值的 Jansson 转储,指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24908480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com