在 JNI 方法上返回一个字符串数组 [英] Return a String array on a JNI method

查看:75
本文介绍了在 JNI 方法上返回一个字符串数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要从 C++ 获取一个字符串列表 (char*) 并将其返回给 Java.

I need to get a List of Strings (char*) from C++ and return it to Java.

我该怎么做?

我认为一种解决方案是返回一个预定义的大字符串,例如:[item1][item2]"并在 Java 上进行拆分,但这看起来不是正确的方法.

I think one solution is return a big string pre-defined like: "[item1][item2]" and make a split on Java, but it doesn't look like the right approach.

推荐答案

在 JNI 文档中查看 NewObjectArray.

Look at NewObjectArray into the JNI doc.

基本上,您可以从 JNI 函数返回一个字符串数组 (Java),然后将其转换为 List 或任何类型的集合类型.

Basically you can return from the JNI function an Array Of String (Java) an then transform it in a List or a whatever kind of Collection type.

伪代码:

Java:

....
public List<String> getFooAsList(){
  return new ArrayList(this.getData());
}  
private native String[] getData();

JNI

#include <jni.h>


  JNIEXPORT jobjectArray JNICALL 
               como_foo_bar_getData
  (JNIEnv *env, jobject jobj){

    jobjectArray ret;
    int i;

    char *data[5]= {"A", "B", "C", "D", "E"};

    ret= (jobjectArray)env->NewObjectArray(5,env->FindClass("java/lang/String"),env->NewStringUTF(""));

    for(i=0;i<5;i++) env->SetObjectArrayElement(ret,i,env->NewStringUTF(data[i]));

    return(ret);
 }

未测试!!!

告诉我它是否适合你

问候

这篇关于在 JNI 方法上返回一个字符串数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆