Pasar un puntero desde JNI a Java usando una @ lar

Estoy tratando de pasar una estructura como puntero de JNI a Java para poder pasarla más tarde de Java a JNI. He leído este hilo: Pasando punteros entre C y Java a través de JNI, pero no tuve éxito.

Tengo una estructura bastante compleja:struct myStruct_s myStruct;

Desde Java, llamo a una función JNI para inicializar la estructura y devolver un largo (puntero a la estructura):

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

Luego llamo a un método Java con ese argumento largo. En JNI quiero poder usar la estructura creada anteriormente. Me gusta esto:

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

Bueno, no funciona. Supongo que mi reparto del largo en la estructura está mal. ¿Cómo debería hacerlo? Gracias

EDITA: Gracias por las sugerencias, aquí están las funciones de trabajo

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

Respuestas a la pregunta(3)

Su respuesta a la pregunta