Передача указателя из JNI в Java с использованием длинного

Я пытаюсь передать структуру как указатель из JNI в Java, чтобы иметь возможность передать ее позже из Java в JNI. Я прочитал этот поток: Передача указателей между C и Java через JNI , но мне это не удалось.

У меня довольно сложная структура: struct myStruct_s myStruct;

Из Java, Я вызываю функцию JNI для инициализации структуры и возврата длинного (указателя на структуру):

JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
    struct myStruct_s mystruct;
    long *lp = (long*)&myStruct;
    return lp;
}

Затем я вызываю метод Java с этим длинным аргументом. В JNI я хочу иметь возможность использовать созданную ранее структуру. Мне нравится это:

JNIEEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
    struct myStruct_s *arg = (struct myStruct_s *)&jarg;
    ...
}

Ну, это не работает. Я предполагаю, что мой тип long в структуре неверен. Как я должен это делать? Спасибо.


РЕДАКТИРОВАТЬ : Спасибо за подсказки, вот рабочие функции

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;
}

7
задан Community 23 May 2017 в 11:59
поделиться