C层std::vector<std::string>传递数据到java层string[]
时间: 2023-10-16 21:08:54 浏览: 264
在C++层使用JNI(Java Native Interface)可以将std::vector<std::string>数据传递到Java层的String[]中。
首先,将std::vector<std::string>转换为jobjectArray对象,然后再将其传递给Java方法。
以下是示例代码:
```cpp
// 将std::vector<std::string>转换为jobjectArray
jobjectArray convertToJStringArray(JNIEnv* env, const std::vector<std::string>& strings) {
jobjectArray array = env->NewObjectArray(strings.size(), env->FindClass("java/lang/String"), nullptr);
for (size_t i = 0; i < strings.size(); ++i) {
env->SetObjectArrayElement(array, i, env->NewStringUTF(strings[i].c_str()));
}
return array;
}
// C++函数示例
extern "C" JNIEXPORT jobjectArray JNICALL Java_com_example_NativeClass_getStringArray(JNIEnv* env, jobject obj) {
std::vector<std::string> data = {"Hello", "World", "C++", "to", "Java"};
return convertToJStringArray(env, data);
}
```
然后,在Java层调用上述的JNI方法即可获取std::vector<std::string>的数据:
```java
public class NativeClass {
static {
System.loadLibrary("native-lib");
}
private native String[] getStringArray();
public static void main(String[] args) {
NativeClass nativeClass = new NativeClass();
String[] stringArray = nativeClass.getStringArray();
for (String s : stringArray) {
System.out.println(s);
}
}
}
```
阅读全文