繁体   English   中英

JNA-结构创建错误

[英]JNA - Structure creation error

我有以下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;
}

我究竟做错了什么?

非常感谢。

我认为您不应该初始化数组...不,算了吧,这不应该是问题。

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

您需要确保按值返回结构。 默认情况下,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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM