jna将数组引用传递到本机dll

ix0qys7i  于 2021-07-05  发布在  Java
关注(0)|答案(1)|浏览(431)

dll中的函数是:

int getInfo (
  unsigned int Index,
  unsigned int* Mask,
  unsigned int* Serial,
  unsigned __int64* licInfo);

重要的是 licInfo 是一个包含4个元素的数组。
在java中,方法声明如下:

int getInfo(int Index, IntByReference Mask, IntByReference Serial, Memory licInfo);

方法调用:

int Index = 0;
IntByReference Mask = null;
IntByReference Serial = null;
Memory LicInfo = new Memory(256);    
int status = dll.INSTANCE.getInfo(Index, Mask, Serial, licInfo);

dll返回一个错误代码,指出参数错误。我很确定这个错误是最后一个参数。我还尝试直接传递长数组或传递指针,但没有成功。

tkclm6bt

tkclm6bt1#

函数Map本身看起来很正常,尽管我将替换 MemoryPointer 在Map上。作为 Memory 延伸 Pointer 您仍然可以像现在一样初始化和传递值。
如果没有api文档指定参数的期望值,我必须对这个问题进行一些有根据的猜测。本机函数需要 int 三个指向信息的指针,最后一个是 long . 前两种情况下会发生什么?
问题很可能是 null 传递给 Mask 以及 Serial 指针。除非api特别说明 null 如果允许,则很可能应使用 new IntByReference() 为一个 int 可以在本机端填充的。
在为 long[4] 不应该具体导致错误,您已经为256位数组分配了256字节。分配 new Memory(32) 应该够了。

相关问题