通过 JNI 从 c++ 获取 java 数组 [英] Get java array from c++ via JNI

查看:50
本文介绍了通过 JNI 从 c++ 获取 java 数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

So, I want to obtain resultNative from c++ but resultNative is in Java. can anybody please show me how to do that via JNI? I am not so familiar with c++ and have searched google for a long time but didn't find any answer. thank you so much. the nativeResult is here in Java.

public String[] searchDatabase()
{
    String result[]=new String[6];
    String nativeResult[]=new String[2];
    tName=this.getTargetName();

    result=da.SearchKorea(tName,ctx);
    tType=result[2];
    tTrans=result[3];
    tImage=result[4];
    tFave=result[5];

    nativeResult[1]= tImage+" - "+tName;
    nativeResult[2]= tTrans+" ["+tType+"]";
    return nativeResult;
}

解决方案

First you have to get a reference to the class providing the method. Let's say your class is called MyClass and it is in package p. You get the reference to the class like this:

// You get the JNIEnv* pointer when calling a native function.
jclass myClass = env->FindClass("p/MyClass");

Or if you have a reference to the java object then you can also use GetObjectClass:

jclass myClass = env->GetObjectClass(javaObject);

Then you have to get the ID of the method you'd like to call by providing the name of the method and a string describing the signature of the method.

"()[java/lang/String;" describes a method expecting no arguments and returning a string array.
jmethodID methodID = env->GetMethodID(myClass , "searchDatabase", "()[java/lang/String;");

Then you have to call the method with JNIEnv::CallObjectMethod, and here you have to pass the referenc to the java object.

jobjectarray strings = env->CallObjectMethod(javaObject, methodID);

Then you can get an element of the array with GetObjectArrayElement.

int index = 0;
jstring string = env->GetObjectArrayElement(strings, index);

And then you can get the native string from it in various ways.

const char* nativeChars = env->GetStringUTFChars(string, nullptr);

You can find more information about JNI here, and details about JNI type signatures here.

这篇关于通过 JNI 从 c++ 获取 java 数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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