我仍在学习JNA,并且需要通过Java系统中的套接字连接将数据发送到旧版C系统。我已经提供了.dll和.h文件。
我必须使用.h文件定义访问C系统中的函数。 dll将验证数据,如果即时通讯使用的Java中的数据结构良好,它将把请求转发到C应用程序。 如果数据结构不匹配,它将直接返回错误int。
public static void main(String[] args) {
Arg arg = new Arg();
arg.var1=1;
arg.var2="12345".getBytes();
arg.var3="12345678901".getBytes();
ExampleDLL exampleDLL = ExampleDLL.INSTANCE;
System.out.println(exampleDLL.someFunctionInDLL(arg));
}
public interface ExampleDLL extends Library {
ExampleDLL INSTANCE = (ExampleDLL) Native.loadLibrary("exampleDLL.dll", ExampleDLL.class);
int someFunctionInDLL(Arg arg);
}
public class Arg extends Structure {
public short var1;
public byte[] var2 = new Byte[5];
public byte[] var3 = new Byte[9001];
@Override
protected List<String> getFieldOrder() {
//.....
}
}
From.h文件:
typedef struct
{
short int var1;
char var2[5];
char var3[9001];
}Arg;
int someFunctionInDLL(Arg *dr);
当我尝试访问dll函数im时返回错误int,该错误int表示数据结构不正确/格式不正确。 我猜我在用Java和C转换函数变量的内存大小时犯了一些错误。
根据我的学习曲线,将不胜感激。预先感谢。