Какое картирование JNA для «Unsigned Char Data [1]»?JAVA

Программисты JAVA общаются здесь
Anonymous
 Какое картирование JNA для «Unsigned Char Data [1]»?

Сообщение Anonymous »

Я пытаюсь написать JNA Frappers для Libraw, и я спотыкаюсь над одной конкретной структурой C: < /p>
typedef struct
{
enum LibRaw_image_formats type;
ushort height, width, colors, bits;
unsigned int data_size;
unsigned char data[1];
} libraw_processed_image_t;
< /code>
... в частности, последний член 'Data [1]'.
Это, кажется, является массивом Char (байт?), который содержит большой блок 8 или 16 бит данные по размеру (и макету), из которых определяются только во время выполнения. Я бы ожидал увидеть что -то большее похожее на «void *data» (которые используются в других структурах Libraw), и призвал бы получить объявление JNA, такое как «данные общего указателя» с GetByTearray или GetShortArray для доступа к данным в Java. Тем не менее, API Libraw - это то, чем он является, так как я могу объявить JNA эквивалент? «На самом деле приводит к тому же макету памяти, который я пытался использовать« данные общего указателя »в JNA, но затем я получаю« ошибку: допуск на память », когда я вызову getbytearray. Я также попытался использовать «public byte [] data = new Byte [1]», но это, конечно, дает мне доступ только к первому байту. Я мог бы сойти с рук с «public byte [] data = new Byte [some_big_number]», но это кажется опасным (даже если это работает), поскольку я не знаю, насколько велики данные в точке выполнения, когда структура/ Класс создан. < /p>
Итак, какой правильный способ сделать это? ) до тех пор, пока некоторые_BIG_NUMBER - точный размер данных из DLL. Я могу получить фактический размер только во время выполнения, поэтому у меня осталась проблема с тем, как определить класс JNA Wrapper с определяемым временем массива, когда я не называю конструктор в моем коде (он где-то создается в JNA. ). GetInt, GetShot и GetbyTearray, чтобы динамически «разобрать» предполагаемую структуру. Я не знаю, является ли это лучшим решением (или даже хорошим), но, кажется, работает.

Подробнее здесь: https://stackoverflow.com/questions/794 ... char-data1

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