Заполните и передайте массив структур в Java

Я провел большую часть утра, пытаясь заполнить и передать массив заполненных структур на C ++ из Java с помощью JNA. У меня есть значительная часть кода на основе JNA, и я чувствую, что это должно быть просто, но я не могу понять или найти пример, который не использует функции @deprecated. Я подозреваю, что это тривиально, и я буду чувствовать себя глупо, когда кто-то покажет мне, но я был бы очень признателен за помощь.

Немного предыстории того, что я пробовал:
Я почему-то сомневаюсь, что это важно, но после того, как я научился писать файлы интерфейса вручную (и заставил их работать), я переключился на JNAerator. JNAerator переводит

MyStruct* mine

в

MyStruct mine

на Яве. Это немного смущает меня, потому что в Java это можно использовать только для указания на один объект. В какой-то момент я посмотрел на использование

MyStruct** mine

что переводится как

PointerByReference mine

Но это кажется излишним, потому что мне не нужно изменять структуры или когда-либо снова обращаться к ним в этом отношении. С этого момента я перепробовал все, что мог придумать, но мне так и не удалось успешно отправить больше, чем первая структура.

3

Решение

Перечитав свой вопрос (передайте структуры из Java в C ++), вот что вы можете сделать:

// Assuming a native signature like this:
// call_native_function(MyStruct** struct_list, int count)

MyStruct.ByReference[] list = new MyStruct.ByReference[SIZE];
for (int i=0;i < list.length;i++) {
list[i] = new MyStruct.ByReference();
// Initialize the struct as needed
}
// Call whatever native method...
nativeLibrary.call_native_function(list, list.length);

Смотрите также JNA FAQ.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]