Передача указателей между C и Java через JNI

Я хранил указатели 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-битной машины.

Я бы хотел, чтобы мой код компилировался без предупреждений, чтобы при появлении законного предупреждения я видеть это. У кого-нибудь есть идеи?

Спасибо, Бен

10
задан Community 23 May 2017 в 12:33
поделиться