jni c++ 返回多个参数
时间: 2023-08-04 08:26:34 浏览: 71
在 JNI 中,C++ 函数只能返回一个参数。但是,可以通过指针参数来模拟返回多个参数。例如,假设我们有一个 C++ 函数,需要返回两个整数:
```c++
void getTwoInts(int* int1, int* int2);
```
在 Java 中,我们可以声明一个方法来调用该函数,并使用一个 int 数组作为参数:
```java
public static native void getTwoInts(int[] ints);
```
在 JNI 实现中,我们需要将 int 数组转换为指向 int 变量的指针,并将指针传递给 C++ 函数:
```c++
JNIEXPORT void JNICALL Java_MyClass_getTwoInts(JNIEnv* env, jobject obj, jintArray jints) {
// 获取数组长度
jsize len = env->GetArrayLength(jints);
// 获取数组指针
jint* ints = env->GetIntArrayElements(jints, NULL);
// 调用 C++ 函数
int int1, int2;
getTwoInts(&int1, &int2);
// 将返回值写入数组
ints[0] = int1;
ints[1] = int2;
// 释放数组指针
env->ReleaseIntArrayElements(jints, ints, 0);
}
```
注意,我们在释放数组指针时,传递了一个标志位 0,表示不需要将数组内容复制回 Java 层。如果需要复制回 Java 层,应该传递标志位 JNI_COMMIT。