如何将指针映射到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