JNA - Ошибка создания структуры - PullRequest
0 голосов
/ 09 ноября 2011

У меня есть следующий код C ++:

typedef struct {
    int TabSock[1024];
    DWORD TabIP[1024];
    int NumSockConec;
} TTABSOCK;
typedef TTABSOCK *PTABSOCK;

И функция:

TTABSOCK __stdcall mt_connectlist(void);

Вышеуказанная функция находится в DLL. Я пытаюсь создать эту структуру в Java с помощью JNA, но я не добился успеха. Моя программа выдает ошибку и закрывается, когда я пытаюсь выполнить эту встроенную функцию.

Ниже приведена моя реализация структуры в Java / JNA:

public class TTABSOCK extends Structure {

    public int[] TabSock = new int[1024];
    public DWORD[] TabIP = new DWORD[1024];
    public int NumSockConec;
}

Что я делаю не так?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Вы должны убедиться, что вы возвращаете структуру по значению. По умолчанию структура JNA обрабатывается как «struct *» в аргументах и ​​возвращаемых типах, поэтому вам нужно указать, что вы хотите использовать «struct» вместо этого в этом случае.

public interface MyLibrary extends StdCallLibrary {
    class TTABSOCK extends Structure {
        public static class ByValue extends TTABSOCK implements Structure.ByValue { }
        // ...
    }
    TTBASOCK.ByValue mt_connectlist();
}
0 голосов
/ 09 ноября 2011

Я думаю, вы не должны инициализировать массивы ... нет, забудьте об этом, это не должно быть проблемой ..

public static class TTABSOCK extends Structure {

    public int[] TabSock = new int[1024];
    public DWORD[] TabIP = new DWORD[1024];
    public int NumSockConec;

    public static class ByReference extends TTABSOCK implements Structure.ByReference {};
    public static class ByValue extends TTABSOCK implements Structure.ByValue {};
}
...