Java 指向作为JNA方法参数的结构数组的指针

Java 指向作为JNA方法参数的结构数组的指针,java,c,jna,Java,C,Jna,我试图在库上创建一个JNA实现。我的问题是,我没有注意到指向结构数组的指针。我曾试图寻找解决方案,但它们总是与我需要知道的略有不同。JNA dokumentation仅显示一个带有指向基元类型数组指针的示例。这似乎也有不同的方法,其中一些方法是去润滑的 int WSAAPI internal_sctp_getpaddrs (SOCKET, sctp_assoc_t, struct sockaddr **); void WSAAPI internal_sctp_freepaddrs (struc

我试图在库上创建一个JNA实现。我的问题是,我没有注意到指向结构数组的指针。我曾试图寻找解决方案,但它们总是与我需要知道的略有不同。JNA dokumentation仅显示一个带有指向基元类型数组指针的示例。这似乎也有不同的方法,其中一些方法是去润滑的

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);
}