在java與c構建多實例的案例中,java中對象保存一個long型成員變量玫霎,作為對應c實例的指針便斥,jni層在新建c對象后,將對象指針(64位)轉成長整型返回給java成員變量保存减噪。然而在某些情況下,調用c實例的方法會出現ACCESS_VIOLATION
车吹,并且在windows上會報錯筹裕,但在linux上就沒問題。經過排查窄驹,問題最終定位如下:
在jni.h
中饶碘,關于jlong
(java long)的typedef
并不是唯一的,在windows上馒吴,long總是32位(所以在linux上沒問題)扎运,所以在jni層將地址轉長整型的操作瑟曲,必須要用__int64
(long
, long int
, long long
都不行)保存變量,并返回給java豪治。