Tôi đã lưu trữ con trỏ c trong Java thông qua JNI bằng cách làm theo những lời khuyên của @tulskiy trong bài viết này Passing pointers between C and Java through JNIĐi qua con trỏ giữa C và Java thông qua JNI
Bí quyết là để cast con trỏ như một jlong. Vì vậy, từ c Tôi có return (jlong) ptr;
Tôi trả về một jlong (luôn luôn 64 bit) vì tôi muốn mã của tôi hoạt động trên cả hệ thống 64 và 32 bit. Kích thước trong bộ nhớ của một con trỏ 64 bit trên một máy tính 64 bit là 64 và nó sau đó trên một máy tính 32-bit, kích thước của con trỏ trong bộ nhớ là 32 bit.
Vấn đề là trên máy 32 bit, tôi nhận được cảnh báo trình biên dịch nói rằng "truyền tới số nguyên từ con trỏ có kích thước khác". Cảnh báo sẽ biến mất nếu tôi có return (jlong) (int32_t) ptr;
Tuy nhiên mã này không tốt cho máy 64 bit.
Tôi muốn biên dịch mã của mình mà không có cảnh báo để nếu có cảnh báo hợp pháp, tôi sẽ thấy nó. Ai có ý tưởng gì không?
Cảm ơn, Bến