$data = file_get_contents('php://input');
echo $data;
Это сработало для меня.
Может ли модификатор
blockquote>const
в поле структуры указателя типа изменить способ хранения структуры в памяти?Ответ , может быть , зависит от компилятора. Более важным для вашего вопроса является то, как
const
влияет на способ доступа к полю на нативной стороне. Независимо от того, что вы делаете на стороне Java, после инициализации поляinfo
вашей структурыcore_st
вы не сможете его изменить.И именно поэтому вы видите то, что видите здесь: определяя
public info_st.ByReference info;
, вы инициализируете структуруcore_st
указателем наNULL
и получаете адрес памяти0x0
, сохраненный для этого поля. При доступе к этому полю с помощью API вы не можете изменить адрес памяти, он застрял.Вы видите те же результаты, инициализирующие его как
long
со значением по умолчанию (0).Решение зависит от того, как API заполняет это значение. Если на нативной стороне функция
open_core
предполагает, что полеinfo
уже инициализировано с указателем на выделенную структуру, и просто изменяет значения в указанной памяти, все готово. Вам просто нужно инициализировать это поле при первом создании структуры.Вы ничего не говорите мне о том, на что указывает
*info
, поэтому ответ будет разным в зависимости от того, является ли он массивомinfo_st
структур или одной структурой. Если это одна структура, у вас есть:public class core_st extends Structure { public Pointer instance; public info_st.ByReference info = new info_st.ByReference(); }
Это выделит здесь необходимую память для структуры
info_st
и сохранит указатель только для чтения в вашей структуреcore_st
, В зависимости от внутренней работыopen_core()
(и на основании вашего отчета это работает на стороне C), это может сработать!Если нет, то, возможно, размещение рабочего кода C поможет определить, есть ли другое сопоставление JNA, которое могло бы помочь, или вам нужно обойти его с помощью собственной пользовательской функции-оболочки dll.