![](/img/trans.png)
[英]How do I extract an array of `struct*` from a pointer to that array (in JNA)?
[英]How do I map a pointer to an array of structures in JNA
我正在嘗試在JNA中映射Win32函數EnumJobs 。 該方法具有以下特征:
BOOL EnumJobs(
__in HANDLE hPrinter,
__in DWORD FirstJob,
__in DWORD NoJobs,
__in DWORD Level,
__out LPBYTE pJob,
__in DWORD cbBuf,
__out LPDWORD pcbNeeded,
__out LPDWORD pcReturned
);
除了LPBYTE pJob之外,我想出了大部分內容,根據文檔,它是指向接收JOB_INFO結構數組的緩沖區的指針。 我似乎無法弄清楚如何正確地進行這種映射。 到目前為止,我有:
boolean EnumJobs(HANDLE hPrinter, DWORD FirstJob, DWORD NoJobs, DWORD Level, JOB_INFO_2[] pJob, DWORD cbBuf, IntByReference pcbNeeded, IntByReference pcReturned );
但我得到一個IllegalArgumentException:無法確定嵌套結構的大小:無法實例化類com.sun.jna.structure(java.lang.InstantiationException)任何有關如何映射和處理的深入見解將不勝感激。
1)弄清楚你需要(或想要)多少個JOB_INFO結構
2)在JOB_INFO的單個實例上使用Structure.toArray()來獲取它們的連續(在內存中)數組
3)傳入第一個JOB_INFO結構或其內存(Structure.getPointer),具體取決於您的方法簽名。
請注意,方法簽名中的Structure參數將向JNA指示它需要自動將Java結構內存與本機內存(包括整個數組)同步; 使用指針離開同步到你。
另外,作為方法參數的Structure表示“struct *”,而不是“struct”作為參數類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.