gpt4 book ai didi

java - 将 C++ 结构映射到 Java 结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:04:46 28 4
gpt4 key购买 nike

我正在尝试调用 dll 文件中存在的 C++ 函数,C++ 函数将结构对象作为参数,函数将为它赋值。我正在通过 Java native 调用使用它,我的程序在下面,

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++ 中,在结构中声明的静态长度数组被内联到结构中。所以你的 C++ 代码在结构上大致等同于:

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

据我所知,这是您能够在 Java 中映射 Address 的唯一方法,因为没有更好的从 Java 数组到 C++ 数组字段的映射。请注意,这与函数中的 C++ 数组参数不同,后者基本上是指针,因此可以正常工作。

关于java - 将 C++ 结构映射到 Java 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52556758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com