he estado almacenando punteros c en Java a través de JNI, siguiendo el consejo de @tulskiy en este post Passing pointers between C and Java through JNIpasar punteros entre C y Java a través de JNI
El truco consiste en emitir el puntero como un jlong. Así que desde c Tengo return (jlong) ptr;
Estoy devolviendo un jlong (siempre 64 bits) porque quiero que mi código funcione en sistemas de 64 y 32 bits. El tamaño en la memoria de un puntero de 64 bits en una computadora de 64 bits es 64 y se deduce que en una computadora de 32 bits, el tamaño del puntero en la memoria es de 32 bits.
El problema es que en la máquina de 32 bits aparece una advertencia del compilador que dice "fundición a entero desde un puntero de diferente tamaño". Las advertencias desaparecen si tengo return (jlong) (int32_t) ptr;
Sin embargo, este código no es bueno para la máquina de 64 bits.
Me gustaría tener mi código compilar sin advertencias para que si hay una advertencia legítima lo veré. ¿Alguien tiene alguna idea?
Gracias, Ben