[英]Pass struct from C to Java JNI
我有一个结构,我想使用 JNI 将其字段从 C 传递到 Java。
结构:
typedef struct {
short headerCount;
short lineCount;
screenLine *headers;
screenLine *lines;
}ScrollList;
和screenLine
是:
typedef char screenLine[ 26 ];
我在 C 中的方法:
short SrvSelect_GetScrollListSelection( ScrollList *list)
{
...
}
我成功地将两条短裤都传给了 Java,但我很难通过最后两个字段:
jshort headerCount = list->headerCount;
jshort lineCount = list->lineCount;
谢谢
假设headerCount
和lineCount
是headers
和lines
中相应的项目数:
jobjectarray jHeaders = env->NewObjectArray(list->headerCount, "[B", NULL);
for (int h = 0; h < list->headerCount; h++) {
jbyteArray jHeader = env->NewByteArray(26);
env->SetByteArrayRegion(jHeader, 0, 26, list->headers[h]);
env->SetObjectArrayElement(jHeaders, h, jHeader);
env->DeleteLocalRef(jHeader);
}
或者,如果每个 screenLine 都适合 Java 的“修改后的 UTF-8”(或者只是 ASCII):
jobjectarray jHeaders = env->NewObjectArray(list->headerCount, "Ljava/lang/String;", NULL);
for (int h = 0; h < list->headerCount; h++) {
jbyteArray jHeader = env->NewStringUTF(list->headers[h]);
env->SetObjectArrayElement(jHeaders, h, jHeader);
env->DeleteLocalRef(jHeader);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.