У меня есть следующая функция C:ЮНА: Указатель на символ **
int fillWithNames(const char*** names, int *n);
который я конвертировать в Java, используя ЮНУ исходя, как это:
public interface PlayersLibrary extends Library {
PlayersLibrary INSTANCE = (PlayersLibrary) Native.loadLibrary("player", PlayersLibrary.class);
int fillWithNames(PointerByReference names, IntByReference n);
}
Как я могу напечатать Струны, что это метод возвращается в names
?
Я хочу сделать что-то вроде этого:
PlayersLibrary.INSTANCE.fillWithNames(names, n);
Pointer first = names.getValue(); // char**
String a = first.getPointer(0).getValue() // char*
System.out.println(a);
, но в этом случае names.getValue()
возвращает нуль, и я не знаю, что делать
Что я могу сделать, чтобы решить эту проблему?
Прежде чем писать одну строку Java, вы могли заставить свою функцию работать, вызывая ее из C++? или C? Я прошу об этом, так как программирование «тройной звезды» подвержено ошибкам, не говоря уже о попытке связать Java с такой штукой. – PaulMcKenzie
Здравствуйте @PaulMcKenzie, да, я проверил, что функция работает на C++. Это унаследованная библиотека, у меня есть – broga
. Если вы возвращаете значение «null» из 'Pointer.getValue()', это означает, что вызываемый пользователь никогда не писал в пространство, которое вы ему дали. Возможно, вы должны были дать ему адрес целого для параметра 'n', чтобы он мог рассказать вам, сколько его заполнило? Включите код, который инициализирует 'names' и' n'. – technomage