Java中的数据类型转换与现有C代码不匹配

时间:2019-07-15 18:45:25

标签: jna

我仍在学习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转换函数变量的内存大小时犯了一些错误。

根据我的学习曲线,将不胜感激。预先感谢。

0 个答案:

没有答案