JNA - 结构创建错误

时间:2011-11-08 20:09:48

标签: java c++ dll struct jna

我有以下C ++代码:

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

一个功能:

TTABSOCK __stdcall mt_connectlist(void);

上面的函数在DLL中。 我正在尝试使用JNA在Java中创建Struct,但我没有获得成功。当我尝试执行原生函数时,我的程序会产生错误并关闭。

以下是我在Java / JNA中的结构实现:

public class TTABSOCK extends Structure {

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

我做错了什么?

非常感谢。

2 个答案:

答案 0 :(得分:0)

我认为你不应该初始化数组......不要忘记它,它应该不是问题..

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 {};
}

答案 1 :(得分:0)

您需要确保按值返回结构。默认情况下,JNA Structure在参数和返回类型中被视为“struct *”,因此在这种情况下您需要指示您想要“struct”行为。

public interface MyLibrary extends StdCallLibrary {
    class TTABSOCK extends Structure {
        public static class ByValue extends TTABSOCK implements Structure.ByValue { }
        // ...
    }
    TTBASOCK.ByValue mt_connectlist();
}