Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换C++;double*到Java double_Java_C++_Java Native Interface_Jna - Fatal编程技术网

转换C++;double*到Java double

转换C++;double*到Java double,java,c++,java-native-interface,jna,Java,C++,Java Native Interface,Jna,我正在努力解决一个基本问题。我试图使用以下签名从Java调用.dll-函数: int function(double* a, double b); 我的问题是,我不知道如何在Java中使用double*a参数,也不知道如何在函数调用完成后打印被操纵的值。我认为对于返回输出的最简单情况,使用长度为1的double[] 这是我的java文件(usefunc.java): 这是我的C++文件(UnfFunc.CPP): 与以下人员一起运行: java usefunc 产生: a[0] = 77

我正在努力解决一个基本问题。我试图使用以下签名从Java调用
.dll
-函数:

int function(double* a, double b);

我的问题是,我不知道如何在Java中使用
double*a
参数,也不知道如何在函数调用完成后打印被操纵的值。

我认为对于返回输出的最简单情况,使用长度为1的double[]

这是我的java文件(usefunc.java):

这是我的C++文件(UnfFunc.CPP):

与以下人员一起运行:

 java usefunc
产生:

 a[0] = 77.7

使用JNA,避免目标共享库之外的任何本机编译:

public class usefunc {

    static {
        Native.register("usefunc");
    }
    public static native int function(double a[], double b);
    public static native int function(DoubleByReference dp, double b);

    public static void main(String args[]) {
        double a[] = new double[1];
        usefunc.function(a,1.0);
        System.out.println("a[0] = " + a[0]);

        DoubleByReference dp = new DoubleByReference();
        usefunc.function(dp,1.0);
        System.out.println("dp = " + dp.getValue());
    }
}

可能是重复的,我只是尝试将变量作为简单的双精度传递。此函数需要通过引用调用,因为变量a也是返回值。int值只是一个错误代码。JNA是为此目的提供的,尽管您也可以使用基本数组。非常感谢!干净简单。它解决了我的问题。
 java usefunc
 a[0] = 77.7
public class usefunc {

    static {
        Native.register("usefunc");
    }
    public static native int function(double a[], double b);
    public static native int function(DoubleByReference dp, double b);

    public static void main(String args[]) {
        double a[] = new double[1];
        usefunc.function(a,1.0);
        System.out.println("a[0] = " + a[0]);

        DoubleByReference dp = new DoubleByReference();
        usefunc.function(dp,1.0);
        System.out.println("dp = " + dp.getValue());
    }
}