相关疑难解决方法(0)

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

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

例如,采用C++例程:

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

和Java代码:

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

我想对myMethod的调用无法像上面的调用一样......或者可以吗?并且Swig有必要使这项工作成功.如果我不能像上面那样打电话,我该如何获取C++代码的值?

c++ java swig

9
推荐指数
1
解决办法
5795
查看次数

将数组作为指针+大小或范围传递给包装函数

给出如下标题:

#include <iostream>
#include <algorithm>
#include <iterator>

inline void foo(const signed char *arr, size_t sz) {
  std::copy_n(arr, sz, std::ostream_iterator<int>(std::cout, "\n"));
}

inline void bar(const signed char *begin, const signed char *end) {
  std::copy(begin, end, std::ostream_iterator<int>(std::cout, "\n"));
}
Run Code Online (Sandbox Code Playgroud)

(为方便起见,我在这里使用了C++ 11,如果改变了实现,可以使用C或C++)

如何将这些函数包装在Java端只接受一个数组,并使用数组的(已知)大小为这些函数提供第二个参数?

c c++ java swig

8
推荐指数
1
解决办法
2705
查看次数

使用SWIG与阵列交互的正确方法

我在swig中使用类型图以及如何使用数组时有点迷失.我准备了一个使用swig在java和c之间使用数组的工作示例,但我不知道它是否是正确的方法.

基本上我想将一个字节数组byte[]从java 传递给c作为符号char*`+它的大小,在c中修改它并查看java中的更改并在c中创建一个数组并在Java中使用它.

我看一下theese的问题: 如何使用Swig将数组(java中的long数组)从Java传递到C++, 将数组传递给包装函数作为指针+大小或范围, 如何让Swig正确包装char*在C中修改为Java Something-other?的缓冲区?

事实上,使用这些解决方案作为制作示例的指南.

这是我在文件arrays.h中的代码:

#include <iostream>

bool createArray(signed char ** arrCA, int * lCA){
    *lCA = 10;
    *arrCA = (signed char*) calloc(*lCA, sizeof(signed char));

    for(int i = 0; i < *lCA; i++){
        (*arrCA)[i] = i;
    }

    return *arrCA != NULL;
}

bool readArray(const signed char arrRA[], const int lRA){
    for(int i = 0; i < lRA; i++){
        std::cout << ((unsigned int) arrRA[i]) << " ";
    }
    std::cout << std::endl;
    return …
Run Code Online (Sandbox Code Playgroud)

c java swig

5
推荐指数
1
解决办法
8259
查看次数

标签 统计

java ×3

swig ×3

c ×2

c++ ×2