[英]Pointer to array of structures as JNA method arguments
我試圖在SctpDrv庫上創建一個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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.