簡體   English   中英

通過JNI從C ++獲取Java數組

[英]Get java array from c++ via JNI

因此,我想從c ++獲取resultNative,但resultNative在Java中。 有人可以告訴我如何通過JNI做到這一點嗎? 我對c ++不太熟悉,已經在google上搜索了很長時間,但是沒有找到任何答案。 非常感謝。 nativeResult在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;
}

首先,您必須獲得對提供該方法的類的引用。 假設您的類稱為MyClass,並且位於包p中。 您會獲得對此類的引用:

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

或者,如果您有對Java對象的引用,則也可以使用GetObjectClass

jclass myClass = env->GetObjectClass(javaObject);

然后,您必須通過提供方法名稱和描述方法簽名的字符串來獲取要調用的方法的ID。

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

然后,您必須使用JNIEnv::CallObjectMethod調用該方法,在這里您必須將Referenc傳遞給java對象。

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

然后,您可以使用GetObjectArrayElement獲得數組的元素。

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

然后,您可以通過各種方式從中獲取本地字符串。

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

您可以找到有關JNI的更多信息這兒 ,以及有關JNI類型簽名的細節在這里

我相信您可以通過傳回jobjectArray來做到這一點。

int elements = 5;
jobjectArray returnArray = (jobjectArray)env->NewObjectArray(elements, env->FindClass("java/lang/string"), env->NewStringUTF(""));
for(int i = 0; i < elements; i++)
{
    char str[12];
    sprintf(str, "%i", i);
    env->SetObjectArrayElment(returnArray, i, env->NewStringUTF(str));
}

return returnArray;

我只用字節數組完成了此操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM