当前位置: 首页 > 面试题库 >

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

酆华皓
2023-03-14
问题内容

我在C 中有一个方法,该方法将双精度数组作为参数。我从Java调用此方法,需要传递一个双精度数组。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!

在carrays上查看Swig文档

%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数组…这可以满足我的需求,并且是解决我的问题的最佳解决方案。谢谢大家的回答!



 类似资料:
  • 我在C中有一个函数,我需要在Java中创建一个包装器。该函数期望FILE类型的输入参数(来自标准输入输出)。我不相信Swig可以在Java中自动适应一个接口,而不需要在Swig接口文件中进行一些手动工程-我可能错了。 这是我所拥有的 C(标题h): 我尝试过编译,但结果是创建了Swig指针类型:SWIGTYPE_p_FILE,这无助于我将FILE type参数从Java传递到C。

  • 问题内容: 我有一个字符串数组一样,我想这个数组发送到 ç 使用 JNI 。我找不到任何明确的解决方案。我试图将此字符串视为成功,但没有成功。 有没有办法做到这一点? 问题答案: 您可以编写一个简单的函数,该函数接受一个对象,将每个对象强制转换为jstring,然后对其进行调用。 像这样:

  • 如何在JSP中分别显示id、txtfile和语句?如何将arraylist从servlet传递到JSP。 JSP:如何编辑我的JSP。我的JSP出现错误: 类型安全:未经检查的objectto arraylist强制转换

  • 问题内容: 我有一个PHP脚本,可以从数据库中检索名称(字符串)。我想使用$ .ajax()将此数组传递给Javascript。我不明白如何在PHP中对数组进行编码,然后在Javascript中对其进行解码。有人可以为此提供示例代码吗?非常感谢 !! 问题答案: HTML档案:

  • 问题内容: 我需要从Java调用C函数。该函数具有以下API: 我正在用Swig做包装纸。 我读了这篇文章: ByteBuffer.allocate()vs.ByteBuffer.allocateDirect() 最好将结果创建为。 如何将传递给代码c(使用swig) C代码如何从ByteBuffer读取和写入数据? 谢谢 问题答案: 来自http://swig.10945.n7.nabble.c

  • 在控制器中(也可能是Main或另一个文件,我不确定这一切是如何工作的),我们有以下内容: 在Scene Bilder生成的FXML中,如下所示: