【发布时间】:2016-09-14 19:12:00
【问题描述】:
在开发过程中,由于错误,我错过了在函数中添加参数。但是本机 jni 调用中的相同函数具有参数。但它仍然从java调用精确的方法。
Java 类 Demo.java。
package jniexamples.rmi;
class Demo {
private native void jBoolean();
public static void main(String[] args) {
new Demo().jBoolean();
}
static {
System.load("jnidemo.so");
}
}
Demo.c
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL
Java_jniexamples_rmi_Demo_jBoolean(JNIEnv *env, jobject ob,jint dtype)
{
printf("first demo %d" , dtype);
return;
}
结果:第一个演示 -1579007728
即使方法签名不同,我也很困惑,它是如何调用 jni 方法的?
【问题讨论】:
-
看起来你只是得到了缺少参数的未定义值
-
该方法由其名称标识。您需要确保签名匹配。
-
IIRR,你应该包含javah生成的.h头文件,以确保你有正确的函数原型
-
如果我有两个方法并且名称相同但参数不同,那么没有标题就会有问题。
-
@Nilesh 没有其他正确的方法可以做到这一点。 JVM 和
javah共享 Java 本地方法签名如何映射到 C 的确切知识。javah将生成正确的头文件,并由您确保 .c 文件与它一致。跨度>
标签: java c java-native-interface