Как определить и передать ByteBuffer с помощью Swig?

2

Мне нужно вызвать функцию C из Java. Функция имеет следующий API:

void convert(char* pchInput, int inputSize, int convertValue, char* pchOutput, int* outputSize);

Я использую swig для создания оберток.

Я прочитал сообщение: ByteBuffer.allocate() и ByteBuffer.allocateDirect()

И лучше всего создать результат (pchOutput) как DirectByteBuffer.

  • Как передать Bytebuffer в код c (с помощью swig)
  • Как c-код будет читать и записывать данные из ByteBuffer?

Спасибо

Теги:
swig
jni

1 ответ

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

немного измененный образец из http://swig.10945.n7.nabble.com/Re-How-to-specify-access-to-a-java-nio-ByteBuffer-td6696.html, который должен работать после небольших изменений (особенно% typemap (in) (char * pchOutput, int * outputSize)), поскольку я не скомпилировал это, просто запустите swig, чтобы проверить, правильно ли создана java-сторона.

%typemap(in)        (char* pchInput, int inputSize) {
  $1 = jenv->GetDirectBufferAddress($input); 
  $2 = (int)(jenv->GetDirectBufferCapacity($input)); 
} 
%typemap(in)        (char* pchOutput, int* outputSize) {
  $1 = jenv->GetDirectBufferAddress($input); 
  $2 = &((int)(jenv->GetDirectBufferCapacity($input))); 
} 

/* These 3 typemaps tell SWIG what JNI and Java types to use */ 
%typemap(jni)       (char* pchInput, int inputSize), (char* pchOutput, int* outputSize) "jobject" 
%typemap(jtype)     (char* pchInput, int inputSize), (char* pchOutput, int* outputSize) "java.nio.ByteBuffer" 
%typemap(jstype)    (char* pchInput, int inputSize), (char* pchOutput, int* outputSize) "java.nio.ByteBuffer" 
%typemap(javain)    (char* pchInput, int inputSize), (char* pchOutput, int* outputSize) "$javainput" 
%typemap(javaout)   (char* pchInput, int inputSize), (char* pchOutput, int* outputSize) { 
    return $jnicall; 
} 

Ещё вопросы

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