我在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++代码的值?
给出如下标题:
#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端只接受一个数组,并使用数组的(已知)大小为这些函数提供第二个参数?
我在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)