我可以使用返回指针的本机方法吗?
我使用以下语法:
public native int* intArrayMethod(float[] t,int nb_of_subscribers,int tags);
但它表示错误。
答案 0 :(得分:2)
由于C ++和Java之间的数据结构存在差异,因此不应在Java中使用本机指针。和Java的垃圾收集器。
您的Java类应如下所示:
public class IntArrayViaJNI {
private static boolean loaded = false;
private native int[] intArrayMethod(float[] t, int nb_of_subscribers, int tags);
public int[] getIntArray(float[] t, int nb_of_subscribers, int tags) {
// Although this portion should be in a synchronized method,
// e.g. ensureLibraryLoaded().
if (!loaded) {
System.loadLibrary("mylib");
loaded = true;
}
return intArrayMethod(t, nb_of_subscribers, tags);
}
}
您的C ++代码应如下所示:
JNIEXPORT jintArray JNICALL Java_IntArrayViaJNI_intArrayMethod(
JNIEnv *env, jclass cls,
/* generated by JAVAH: float[] t, int nb_of_subscribers, int tags */)
{
jintArray result = (*env)->NewIntArray(env, size);
if (result == NULL) {
return NULL; /* out of memory error thrown */
}
int i, size = MY_ARRAY_SIZE;
// Populate a temp array with primitives.
jint fill[256];
for (i = 0; i < size; i++) {
fill[i] = MY_ARRAY_VALUE;
}
// Let the JVM copy it to the Java structure.
(*env)->SetIntArrayRegion(env, result, 0, size, fill);
return result;
}