у меня есть
const unsigned char publicKeyModulus [], и я хотел бы обернуть его как аргумент и получить как байт [] в моем java-слое.
c++ onInitialize (publicKeyModulus)
Java onInitialize (byte [] publicKeyModulus)
SWIG.i
%typemap(jni) unsigned char *content "jbyteArray"
%typemap(jtype) unsigned char *content "byte[]"
%typemap(jstype) unsigned char *content "byte[]"
%typemap(javain) unsigned char *content {}
%typemap(in) unsigned char * content {
$result = JCALL1(NewByteArray, jenv, arg1->contentLength);
JCALL4(SetByteArrayRegion, jenv, $result, 0, arg1->contentLength, $1);
}
// Optional: ignore contentLength;
%ignore contentLength;
%inline %{
typedef struct {
unsigned char * content;
int contentLength;
} Foo;
%}
Я пробовал много вариаций этих файлов swig, так как в подобных вопросах люди предлагают это, но это не работает для меня. Я думаю, потому что в другом вопросе они используют это как возвращение, и я должен делать что-то не так в моих модификациях, чтобы получить его в качестве аргумента.
Буду признателен за ваши комментарии, спасибо.
Попробовав множество различных решений, тот, который работал лучше, применил%, как было предложено в одном комментарии выше.
%apply (char *STRING, size_t LENGTH) { (char *modulusBytes, int modulusLength) }
просто комментарий для выделения - это то, что имя переменных должно быть таким же, как и те, которые используются в объявлении.
%apply
как описано в 24.8.5 Двоичные данные против строк ?