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