[英]How to call only the return value to Java from a C file function (Java Native Interface)
我有一个Java文件,该文件声明了在C文件中定义的本机方法average()。 该方法取两个数字的平均值,打印“在C中,数字为n1,n2”(n1和n2为输入数字),然后将平均值返回为双精度。
然后,该Java文件调用average()方法,打印“在Java中,平均值为(n1 + n2)/ 2”,然后打印平均值x 2。
这是数字3和2(运行我的Java文件)的示例:
在C中,数字是3和2
在Java中,平均值为2.5
在C中,数字是3和2
5.0
我只想将C文件的返回值(平均值)乘以2。我不希望再次打印字符串“在C中,数字分别为3和2”。 如何只打印C文件中的返回值(平均值),而又不打印字符串“在C中,数字分别为3和2”? 我知道我可以创建另一种方法,但这将是非常重复的。
我的Java文件如下:
public class TestJNIPrimitive {
static {
System.loadLibrary("myjni"); //myjni.dll (Windows)
}
private native double average(int n1, int n2);
public static void main(String args[]) {
System.out.println("In Java, the average is " + new TestJNIPrimitive().average(3,2));
double result = new TestJNIPrimitive().average(3,2);
System.out.println(result*2);
}
}
我的C文件如下:
JNIEXPORT jdouble JNICALL Java_TestJNIPrimitive_average(JNIEnv *env, jobject thisObj, jint n1, jint n2) {
printf("In C, the numbers are %d and %d\n", n1, n2);
jdouble result;
result = ((jdouble)n1 + n2) / 2.0;
// jint is mapped to int, jdouble is mapped to double
return result;
}
谢谢您的帮助!
除非我失去了一些东西,你可以简单地不叫你的C average
函数两次,只是把结果存储你曾经调用后:
public static void main(String args[]) {
double result = new TestJNIPrimitive().average(3,2);
System.out.println("In Java, the average is " + result);
System.out.println(result*2);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.