我正在尝试创建一个 JNA 实现SctpDrv http://www.bluestop.org/SctpDrv/图书馆。我的问题是我不了解指向结构数组的指针。我试图寻找解决方案,但它们总是与我需要知道的略有不同。 JNA 文档仅显示了一个带有指向原始类型数组的指针的示例。似乎还有不同的方法可以做到这一点,其中一些方法已被贬低。
int WSAAPI internal_sctp_getpaddrs (SOCKET, sctp_assoc_t, struct sockaddr **);
void WSAAPI internal_sctp_freepaddrs (struct sockaddr *);
根据文档, getpaddrs 的第三个参数用于返回一个数组sockaddr
结构。声明相应 JNA 方法的推荐方法是什么?如何准备参数,以及如何在 java 代码中调用后访问它?
另外,为了帮助我理解,我将如何声明和使用参数是包含指针的数组的函数?
// Declare the SOCKADDR struct
public class SOCKADDR extends Structure
{
// Declare fields here
public SOCKADDR()
{
// required for toArray()
}
public SOCKADDR(Pointer pointer)
{
super(pointer);
}
}
// Declare these Java methods to be mapped by JNA to the C APIs
public int internal_sctp_getpaddrs(int socket, int sctp, PointerByReference sockaddrRef);
public void internal_sctp_freepaddrs(SOCKADDR sockaddr);
// Use this code to call internal_sctp_getpaddrs()
// This code assumes the number of SOCKADDRs returned is in the int return value.
{
PointerByReference sockaddrRef;
Pointer pointer;
SOCKADDR sockaddr, sockaddrs[];
int size;
sockaddrRef = new PointerByReference();
size = internal_sctp_getpaddrs(socket, sctp, sockaddrRef);
pointer = sockaddrRef.getValue();
sockaddr = new SOCKADDR(pointer);
sockaddrs = (SOCKADDR[]) sockaddr.toArray(size);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)