JNA Java структура из указателя - PullRequest
0 голосов
/ 14 января 2012

У меня есть структура, которая не полностью описана как оригинальная Си.

    public class DISPLAY_DEVICE extends Structure {
        public char DeviceName[] = new char[32];
        public int StateFlags;
    }

В то время как на самом деле нужно больше переменных.Однако мне потребуется много времени, чтобы перенести их все.Теперь я создаю структуру и передаю указатель на функцию dll и пытаюсь использовать device.read ();восстановить переменные.Однако переменные возвращают пустые.Итак, мой вопрос, мне нужно заполнить всю структуру?Или что-то еще не так?

    DISPLAY_DEVICE displayDevice = new DISPLAY_DEVICE();
    int i = 0;
    while((CLibrary.INSTANCE.EnumDisplayDevicesA(Pointer.NULL, i, displayDevice.getPointer(), 0))) {
        System.out.println("screen" + i);
        displayDevice.read();
        System.out.println(displayDevice.StateFlags);
        System.out.println(displayDevice.DeviceName);

1 Ответ

4 голосов
/ 16 января 2012

Как минимум, вы должны определить структуру, которая будет иметь тот же размер, что и ее собственный аналог (вы можете заполнить ее полем byte [] для вещей, которые вас не интересуют).:

public class MyStruct extends Structure {
   public char[] DeviceName = new char[32];
   public char StateFlags;
   public byte[] dontcare = new char[128];
}

Вы также можете использовать JNAerator для автоматической генерации отображений из заголовка C, если определение не доступно в platform.jar JNA.

...