gpt4 book ai didi

java - 如何使用 Swig 将数组从 Java 传递到 C++?

转载 作者:可可西里 更新时间:2023-11-01 16:37:54 24 4
gpt4 key购买 nike

我在 C++ 中有一个方法,它接受一个 double 组作为参数。我从 Java 调用这个方法,需要传递一个 double 组。 C++ 例程读取和修改数组的值,我需要在 Java 中更新这些值。我该怎么做?

以C++例程为例:

void myMethod( double *values, int size ) {
for ( int i=0; i < size; i++ ) {
values[i] = 2*values[i];
}
}

Java 代码:

double[] values = { 1.3, 1.1 };
myMethod(values,values.length);
System.out.println(values[0]); // prints 2.6

我想对 myMethod 的调用不能像上面的调用那样...或者可以吗?以及在 Swig 中完成这项工作所必需的东西。如果我无法像上面那样进行调用,我如何将我的值获取到 C++ 代码?

最佳答案

使用 carrays.i!

参见 Swig docs on carrays

%include carrays.i
%array_functions( double, double_array )

这两行在我的模块中创建了以下代码:

 public static SWIGTYPE_p_double new_double_array(int nelements) {
long cPtr = SimulatorModuleJNI.new_double_array(nelements);
return (cPtr == 0) ? null : new SWIGTYPE_p_double(cPtr, false);
}

public static void delete_double_array(SWIGTYPE_p_double ary) {
SimulatorModuleJNI.delete_double_array(SWIGTYPE_p_double.getCPtr(ary));
}

public static double double_array_getitem(SWIGTYPE_p_double ary, int index) {
return SimulatorModuleJNI.double_array_getitem(SWIGTYPE_p_double.getCPtr(ary), index);
}

public static void double_array_setitem(SWIGTYPE_p_double ary, int index, double value) {
SimulatorModuleJNI.double_array_setitem(SWIGTYPE_p_double.getCPtr(ary), index, value);
}

这允许我在 Java 中使用 C 数组...这解决了我的需求,并且是解决我的问题的最佳方案。谢谢大家的回答!

关于java - 如何使用 Swig 将数组从 Java 传递到 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4167233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com