Passando um ponteiro de JNI para Java usando um @ lon
Estou tentando passar uma estrutura como um ponteiro de JNI para Java para poder passar mais tarde de Java para JNI. Eu li este tópico:Passando ponteiros entre C e Java através de JNI, mas não obtive sucesso.
Tenho uma estrutura bastante complexa:struct myStruct_s myStruct;
Do Java, chamo uma função JNI para inicializar a estrutura e retornar um longo (ponteiro para a estrutura):
JNIEXPORT jlong JNICALL Java_example_ExampleJNI_getStruct(JNIEnv *jenv, jclass jcls) {
struct myStruct_s mystruct;
long *lp = (long*)&myStruct;
return lp;
}
Então eu chamo um método Java com esse argumento longo. No JNI, quero poder usar o strcuture criado anteriormente. Eu faço assim:
JNIEEXPORT jint JNICALL Java_example_ExampleJNI_methode1(JNIEnv *jenv, jclass jcls, jlong jarg) {
struct myStruct_s *arg = (struct myStruct_s *)&jarg;
...
}
Bem, isso não funciona. Eu acho que meu elenco do longo na estrutura está errado. Como devo fazer isso? Obrigado
EDITA: Obrigado pelas dicas, aqui estão as funções de trabalho
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;
}