3
Я посмотрел повсюду. Я пробовал некоторые из методов на этом сайте. Но безрезультатно.SWIG unsigned char и byte []
У меня есть C++ глобальную функцию
char* squid(char* buff, int len);
я создать .i файл
%module Crabby
%include "arrays_java.i"
%{
/* headers here are included in the wrapper code */
#include "sponge.h"
%}
%typemap(jtype) (const signed char *arr, size_t sz) "byte[]"
%typemap(jstype) (const signed char *arr, size_t sz) "byte[]"
%typemap(jni) (const signed char *arr, size_t sz) "jbyteArray"
%typemap(javain) (const signed char *arr, size_t sz) "$javainput"
%typemap(in) (const signed char* arr, size_t sz) {
$1 = JCALL2(GetByteArrayElements, jenv, $input, NULL);
const size_t sz = JCALL1(GetArrayLength, jenv, $input);
$2 = $1 + sz;
}
%typemap(freearg) (const signed char *arr, size_t sz) {
// Or use 0 instead of ABORT to keep changes if it was a copy
JCALL3(ReleaseByteArrayElements, jenv, $input, $1, JNI_ABORT);
}
%apply (const signed char* arr, size_t sz) { (const unsigned char* buff, int len) }
%apply (const signed char* arr, size_t sz) { (const unsigned char* query, int queryLen) }
%include "sponge.h"
Независимо от того, что я делаю интерфейс всегда
public static String Squid(String buff, int len)
если я удалить unsigned Я получаю незаконные конверсии в обертке cxx
это Swig 2.0.1
Есть ли способ, чтобы исправить подпись функции так, что он принимает только строку? – soandos
@soandos yes, но вопрос в том, как вы хотите сопоставить строку с символом 'char *', поскольку 'jchar' не совпадает с символом. Вы хотите количество байтов как длину или количество символов? – Flexo
Количество байт – soandos