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