когда я вызываю функцию C в файле .dll:
Код: Выделить всё
//hisgrm is a {segNum} length integer array as return value;
int LA_histogram(float* dat, int datLen, int segNum, float* segVal, int* hisgrm);
Код: Выделить всё
int LA_histogram(float[] dat, int datLen, int segNum, Pointer segVal, Pointer hisgrm);
Код: Выделить всё
···
Pointer hisgrm = new Memory(15L * Native.getNativeSize(int.class));
int code = LA_histogram(safeDataFloat, safeDataFloat.length, segNum, segVal, hisgrm);
int[] integers1 = hisgrm.getIntArray(0, 15);
···
Я пробовал использовать com.sun.jna.Pointer как:
Код: Выделить всё
Pointer hisgrm = new Memory(15L * Native.getNativeSize(int.class));
int code = LA_histogram(safeDataFloat, safeDataFloat.length, segNum, segVal, hisgrm);
int[] integers1 = hisgrm.getIntArray(0, 15);
и мой код py как:
Код: Выделить всё
hisgrmType = ctypes.c_int * segNum
hisgrmBuf = hisgrmType()
return_code = api.LA_histogram(
ctypes.byref(dat),
ctypes.c_int(data_len),
ctypes.c_int(segNum),
ctypes.byref(segValBuf),
ctypes.byref(hisgrmBuf),
)
Так как же изменить код Java, чтобы получить правильный hisgrm?
Подробнее здесь: https://stackoverflow.com/questions/781 ... -using-jna