簡體   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