通过 JNI 从 c++ 获取 java 数组
Get java array from c++ via JNI
所以,我想从 c++ 获取 resultNative但resultNative是Java的。任何人都可以告诉我如何通过 JNI 做到这一点吗?我对c ++不是很熟悉,在谷歌上搜索了很长时间,但没有找到任何答案。非常感谢。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
调用该方法,这里你必须将引用传递给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;
我只用一个字节数组完成了这个
相关文章:
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 如何将字符串数组返回到 java JNI
- 在C++中返回基元类型数组(Java比较)
- 如何在本机 c++ jni 中实现 java 类型数组
- JNI 如何将 Java 对象数组传递给相同对象类型的 C++ 数组
- 声明数组>> int arr[] 时出错;在C++(虽然在 Java 中有效)?
- 无法从JNI设置Java Int数组字段
- 如何将字符串数组从C++返回到Java(JNI)
- 我正在尝试修改一个字节数组并通过 JNI 将其从 c++ 发送到 java
- 如何修复将传输到 java 的 2d 数组代码使用 JNI
- JNI:将整数数组从Java传递到C
- 将简单的 Java 数组传递给原始的 C 数组 SWIG
- C++ Java 数组转换
- JNI 缓存 Java 数组
- 通过 JNI 从 c++ 获取 java 数组
- C++向量,Java数组等效
- c++和Java数组声明/定义:差异
- 是否有任何方法可以通过JNI直接指向Java数组
- Java数组列表转换为c++
- 如何使用SWIG从c++返回Java数组?