Я пытаюсь передать структуру в виде указателя из JNI в Java, чтобы потом можно было передать ее обратно из Java в JNI. Я прочитал эту ветку: Передача указателей между C и Java через JNI , но мне это не удалось.
У меня довольно сложная структура: struct myStruct_s myStruct;
Из Java я вызываю функцию JNI для инициализации структуры и возврата long (указатель на структуру):
JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
struct myStruct_s mystruct;
long *lp = (long*)&myStruct;
return lp;
}
Затем я вызываю метод Java с таким длинным аргументом. В JNI я хочу использовать созданную ранее strcuture. Мне так нравится:
JNIEEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
struct myStruct_s *arg = (struct myStruct_s *)&jarg;
...
}
Ну, это не работает. Я предполагаю, что мой бросок длинного в структуру неправильный. Как я должен это делать?
Спасибо.
РЕДАКТИРОВАТЬ : Спасибо за подсказки, вот рабочие функции
JNIEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
struct myStruct_s *arg;
arg = (struct myStruct_s *)jarg;
...
}
JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
struct myStruct_s *myStruct;
myStruct = (struct myStruct_s *)malloc(sizeof(struct myStruct_s));
long lp = (long)myStruct;
return lp;
}