Android Java NDK JNI Передача объекта, включая несколько уровней объектных массивов в C ++ - PullRequest
0 голосов
/ 06 ноября 2018

На C ++ стороне, у меня есть это:

typedef struct OUTER_STRUCT {
char                c1;
char                c2;
MIDDLE_STRUCT       inner[50]   //max.necssary size=50
} OUTER_STRUCT,*OUTER_STRUCT;

typedef struct MIDDLE_STRUCT {
long                l1;
long                l2;
INNER_STRUCT        inner[60]   //max.necssary size=60
} MIDDLE_STRUCT,*MIDDLE_STRUCT;

typedef struct INNER_STRUCT {
double              d1;
double              d2;
} INNER_STRUCT,*INNER_STRUCT;

и

void PARSE_INTO_BYTE_BUFFER(const OUTER_STRUCT *os, unsigned char *buffer){
...
};

На Java сторона, у меня есть это:

public class OuterClass {
    char c1;
    char c2;
    ArrayList<MiddleClass> midClassList;
}

public class MiddleClass{
    long l1;
    long l2;
    ArrayList<InnerClass> innerClassList;
}

public class InnerClass{
    double d1;
    double d2;
}

Моя задача - заполнить структуру на стороне Java, передать ее эквивалентной C-структуре на стороне C, затем вызвать функцию PARSE_INTO_BYTE_BUFFER (), чтобы получить массив байтов, а затем передать его обратно на сторону Java. Так что в основном мне нужно что-то вроде:

public native byte[] getByteArrayFromJNI(OuterClass os);
  • Реализуемо ли это?

  • Кто-нибудь может сказать мне, как должна выглядеть функция JNICALL C ++?

  • Если это невозможно, какие другие подходы вы бы предложили?

  • Должен ли я разделить это на несколько функций, таких как:

    • 1 функция для инициализации экземпляра внешней структуры глобально,
    • 1 функция для добавления экземпляра внутренней структуры к средней структуре,
    • 1 функция для добавления экземпляра средней структуры и
    • 1 функция для анализа (глобальной) экземпляра внешней структуры в байтовом буфере и возврата его в Java

...