Правильный способ взаимодействия с массивами с помощью SWIG
немного потерян с наборами в Swig и как использовать массивы. Я подготовил рабочий пример, который использует массивы между Java и C, используя Swig, но я нене знаю, если это правильный способ сделать это.
В основном я хочу передать байтовый массивbyte[]
из Явы в C как ´подписанный символ * `+ это 's размер, измените его в c и посмотрите изменения в java, создайте массив в c и используйте его в Java.
Я взглянул на эти вопросы:Как передать массив (массив long в Java) из Java в C ++, используя Swig,Передать массив в упакованную функцию как указатель + размер или диапазон,Как я могу заставить Swig правильно обернуть буфер char *, модифицированный в C как Java-то или другое?
И на самом деле использовали решения в качестве руководства, чтобы сделать пример.
Это мой код в файле arrays.h:
#include
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 true;
}
bool modifyArrayValues(signed char arrMA[], const int lMA){
for(int i = 0; i < lMA; i++){
arrMA[i] = arrMA[i] * 2;
}
return true;
}
bool modifyArrayLength(signed char arrMALIn[], int lMALIn, signed char ** arrMALOut, int * lMALOut){
*lMALOut = 5;
*arrMALOut = (signed char*) calloc(*lMALOut, sizeof(signed char));
for(int i = 0; i < *lMALOut; i++){
(*arrMALOut)[i] = arrMALIn[i];
}
return true;
}