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返回一个错误代码,指出参数错误。我很确定这个错误是最后一个参数。我还尝试直接传递长数组或传递指针,但没有成功。
1条答案
按热度按时间tkclm6bt1#
函数Map本身看起来很正常,尽管我将替换
Memory
与Pointer
在Map上。作为Memory
延伸Pointer
您仍然可以像现在一样初始化和传递值。如果没有api文档指定参数的期望值,我必须对这个问题进行一些有根据的猜测。本机函数需要
int
三个指向信息的指针,最后一个是long
. 前两种情况下会发生什么?问题很可能是
null
传递给Mask
以及Serial
指针。除非api特别说明null
如果允许,则很可能应使用new IntByReference()
为一个int
可以在本机端填充的。在为
long[4]
不应该具体导致错误,您已经为256位数组分配了256字节。分配new Memory(32)
应该够了。