如何使用 JNI 将 Java 整数数组传递给 C?
How to pass a Java Integer array into C using JNI?
本页https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html列举了JNI处理的数据类型。例如,要处理数据类型为 int
的 Java 变量,在 JNI 中等效于 jint
.
现在,如果我有一个数据类型为 Integer
的 Java 变量,我该如何在 JNI 中处理这个变量,因为这种数据类型没有明显的等价性?
您必须像对待任何其他对象一样对待 Integer
。您必须找到它的方法 (intValue
) 并在 JNI
中调用它
JNIEXPORT void JNICALL Java_recipeNo055_PassObject_passInteger
(JNIEnv * env, jclass obj, jobject objarg) {
jclass cls = (*env)->GetObjectClass (env, objarg);
jmethodID intValue = (*env)->GetMethodID(env, cls, "intValue", "()I");
jint result = (*env)->CallIntMethod(env, objarg, intValue);
printf("%-22s: %d\n", "Passed value (int)", result);
}
本页https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/types.html列举了JNI处理的数据类型。例如,要处理数据类型为 int
的 Java 变量,在 JNI 中等效于 jint
.
现在,如果我有一个数据类型为 Integer
的 Java 变量,我该如何在 JNI 中处理这个变量,因为这种数据类型没有明显的等价性?
您必须像对待任何其他对象一样对待 Integer
。您必须找到它的方法 (intValue
) 并在 JNI
JNIEXPORT void JNICALL Java_recipeNo055_PassObject_passInteger
(JNIEnv * env, jclass obj, jobject objarg) {
jclass cls = (*env)->GetObjectClass (env, objarg);
jmethodID intValue = (*env)->GetMethodID(env, cls, "intValue", "()I");
jint result = (*env)->CallIntMethod(env, objarg, intValue);
printf("%-22s: %d\n", "Passed value (int)", result);
}