Как получить массив int, передав указатель int из Java с помощью JNA?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Гость
 Как получить массив int, передав указатель int из Java с помощью JNA?

Сообщение Гость »

В настоящее время я работаю над проектом, который требует разработки приложения Java для доступа к собственной DLL (на языке C). Я выбрал JNA для задания моста, и у меня возникли проблемы с передачей правильного параметра указателя int из Java, когда параметр определен как int*.
когда я вызываю функцию 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);
···
И каждый раз, когда я вызываю эту функцию с одними и теми же параметрами, я получаю разные значения hisgrm в качестве возвращаемого значения. Убедитесь, что эта функция дает только один результат с тем же параметром с помощью теста программы Python с библиотекой ctypes.< /p>
Я пробовал использовать 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),
)
программа на Python получает правильный hisgrmBuf.
Так как же изменить код Java, чтобы получить правильный hisgrm?

Подробнее здесь: https://stackoverflow.com/questions/781 ... -using-jna
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»