繁体   English   中英

如何仅从C文件功能(Java本机接口)调用Java的返回值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM