Я хранил указатели c в Java через JNI, следуя совету @tulskiy в этом посте Передача указателей между C и Java через JNI
Уловка заключается в приведении указателя как jlong. Итак, из c у меня есть return (jlong) ptr;
Я возвращаю jlong (всегда 64 бита), потому что я хочу, чтобы мой код работал как в 64-битных, так и в 32-битных системах. Размер в памяти 64-битного указателя на 64-битном компьютере равен 64, и, следовательно, на 32-битном компьютере размер указателя в памяти составляет 32 бита.
Проблема в том, что на 32-битной машине Я получаю предупреждение компилятора о «преобразовании в целое число из указателя разного размера». Предупреждения исчезнут, если у меня есть
return (jlong) (int32_t) ptr;
Однако этот код не подходит для 64-битной машины.
Я бы хотел, чтобы мой код компилировался без предупреждений, чтобы при появлении законного предупреждения я видеть это. У кого-нибудь есть идеи?
Спасибо, Бен