I've been storing c pointers in Java through JNI by following the advice of @tulskiy in this post Passing pointers between C and Java through JNI
The trick is to cast the pointer as a jlong. So from c I have return (jlong) ptr;
I'm returning a jlong (always 64 bits) because I want my code to work on both 64 and 32 bit systems. The size in memory of a 64 bit pointer on a 64 bit computer is 64 and it follows that on a 32-bit computer, the size of the pointer in memory is 32 bits.
The problem is that on the 32 bit machine I get a compiler warning saying "casting to integer from pointer of different size." The warnings goes away if I have
return (jlong) (int32_t) ptr;
However this code is not good for the 64 bit machine.
I would like to have my code compile without warnings so that if there is a legitimate warning I will see it. Anyone have any ideas?
Thanks, Ben