На 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