我有以下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;
}
我做错了什么?
非常感谢。
答案 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();
}