SWIG заключает пример const unsigned char [] в байт Java [] в качестве аргумента

0

у меня есть

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, так как в подобных вопросах люди предлагают это, но это не работает для меня. Я думаю, потому что в другом вопросе они используют это как возвращение, и я должен делать что-то не так в моих модификациях, чтобы получить его в качестве аргумента.

Буду признателен за ваши комментарии, спасибо.

  • 0
    Вы пытались использовать %apply как описано в 24.8.5 Двоичные данные против строк ?
  • 0
    Да, я попытался подать заявку, и это как бы вернул мне то, что я хочу. Но он генерирует GetByteArrayElements в файле cxx, который вызывает сбой моего приложения.
Теги:
swig

1 ответ

0
Лучший ответ

Попробовав множество различных решений, тот, который работал лучше, применил%, как было предложено в одном комментарии выше.

%apply (char *STRING, size_t LENGTH) { (char *modulusBytes, int modulusLength) }

просто комментарий для выделения - это то, что имя переменных должно быть таким же, как и те, которые используются в объявлении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню