繁体   English   中英

将结构从 C 传递到 Java JNI

[英]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;

谢谢

假设headerCountlineCountheaderslines中相应的项目数:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM