簡體   English   中英

如何將指針映射到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM