地图C++;结构到Java结构

地图C++;结构到Java结构,java,c++,jna,Java,C++,Jna,我试图调用一个DLL文件中存在的C++函数,C++函数以结构对象为参数,函数将赋值给它。 我通过Java本机调用使用它,我的程序如下所示 public class WTS_CLIENT_ADDRESS extends Structure { public static class ByReference extends WTS_CLIENT_ADDRESS implements Structure.ByReference { } public int AddressFamily

我试图调用一个DLL文件中存在的C++函数,C++函数以结构对象为参数,函数将赋值给它。 我通过Java本机调用使用它,我的程序如下所示

public class WTS_CLIENT_ADDRESS extends Structure {
    public static class ByReference extends WTS_CLIENT_ADDRESS implements Structure.ByReference {

    }
public int AddressFamily;

public byte[] Address = new byte[20];

public WTS_CLIENT_ADDRESS() {
}

public WTS_CLIENT_ADDRESS(Pointer p) {
    super(p);
}

public byte[] getByteArray() {
    return Address;
}

@Override
protected List getFieldOrder() {
    return Arrays.asList("AddressFamily", "Address");
}
} 
我正确获取了AddressFamily的值,但没有获取Address的值。看起来,C++中的字节数组和定义的java结构字节数组之间的数据结构出了问题。有什么帮助吗

< > C++的结构是,

typedef struct _WTS_CLIENT_ADDRESS {
  DWORD AddressFamily;
  BYTE  Address[20];
} WTS_CLIENT_ADDRESS, *PWTS_CLIENT_ADDRESS;

<>在C++中,结构中声明的静态长度数组被内嵌到Strut中。因此,C++代码是结构化的,大致相当于:

typedef struct _WTS_CLIENT_ADDRESS {
  DWORD AddressFamily;
  BYTE Address1;
  BYTE Address2;
  // ...
  BYTE Address20;
} WTS_CLIENT_ADDRESS;

<> P>这是我所知的,在爪哇中,你可以映射<代码>地址>代码>的唯一方法,因为没有更好的从java数组到C++数组字段的映射。注意,这与函数中的C++数组参数不同,这些函数基本上是指针,因此工作正常。

< P>如果将一个字节传递给java,会怎么样?有两个可能的问题:数组类型或者两者都有。如果一个字节可以毫无问题地传递给Java,那么尝试使用字节*地址而不是字节地址[]。如果没有帮助,请尝试传递字符数组,而不是字节char Address[]char*Address。请告诉我,如果解决了。请提供我们一些样本,你所期望的数据和你得到的数据-这是错误的,看看,你似乎需要改变你的C++方面。bit@Joe实际值:[88,-20,10,-74,106,-20,-35,0,4,0,0,0,64,-19,-35,0,1,0,0,0,0]预计值:[10.182.106.236]