如何将指针映射到JNA中的结构阵列

我试图在JNA中映射Win32函数EnumJobs。该方法具有以下特征:如何将指针映射到JNA中的结构阵列

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)使用Structure.toArray()上JOB_INFO的单个实例,让他们的连续(存储器)阵列

3)根据您的方法签名传递第一个JOB_INFO结构或其内存(Structure.getPointer)。

请注意,方法签名中的Structure参数将向JNA表明它需要自动将Java结构内存与本机内存(包括整个数组)进行同步;使用指针会将同步交给您。

另外,结构作为方法参数意味着“struct *”,而不是“struct”作为参数类型。

以上是 如何将指针映射到JNA中的结构阵列 的全部内容, 来源链接: utcz.com/qa/261441.html

回到顶部