转换C++;double*到Java double
我正在努力解决一个基本问题。我试图使用以下签名从Java调用转换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
.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());
}
}