У меня есть функция C, которая возвращает беззнаковый символ *, который может быть либо указателем на байтовый массив (двоичные данные, представляющие File..etc), либо указателем на массив символов.В настоящее время я использую SWIG %array_class
, который оборачивает все функции C, которые возвращают беззнаковый указатель char, и создает утилиту массива Java (SampleArrayUtil.java) для обработки заполнения и поиска на стороне Java.
Моя проблема в том, что я также использую обтекание unsigned char *
, используя: %apply char * { unsigned char * };
, чтобы получить массив строк на стороне Java.Я не хочу обернуть возвращаемое значение unsigned char *
(используя %apply char * { unsigned char * };
), когда я получаю двоичные данные, я хочу просто иметь байтовый массив на стороне Java.Я думал о создании еще одной функции C для обработки двоичных данных, но я не уверен, как обернуть эту новую функцию, поскольку она также возвратит unsigned char *
(см. getValueFromRowAsByteArray
)
CФункции:
unsigned char * getValueFromRowAsStringArray(struct result_row *row, attribute_type type, int32_t *len)
unsigned char * getValueFromRowAsByteArray(struct result_row *row, attribute_type type, int32_t *len)
//*row* input param with data results, *type* input enum type for the data type being requested and *len* is an output param that contains the length of the data being returned.
Файл интерфейса SWIG для переноса с помощью функции C Возвращение беззнакового символа * (массива символов):
%module Sample
%include "typemaps.i"
%include "stdint.i"
%include "arrays_java.i"
%include "carrays.i"
%array_class(unsigned char, SampleArrayUtil);
%{
#include "C_API.h"
%}
%apply char * { unsigned char * };
%include "C_API.h"