我正在使用JNA在Java中使用.dll。
我尝试使用的方法就是这个(在C中):
int fH; /* file handle */
int error; /* error code */
error = spssOpenWrite("mydata.sav", &fH);
它创建一个新文件并将文件句柄存储在hFile中并返回错误代码。 我不确定如何使用JNA重新创建它,我尝试使用像这样的指针对象:
Pointer fH = new Memory(4096);
int error = 0;
error = CLibrary.INSTANCE.spssOpenWrite("mydata.sav", fH);
但这并没有改变fH的价值。
答案 0 :(得分:0)
fH
的“值”与您最初定义的内存地址相同。但是,如果您尝试读取该值,则应获得结果,例如fH.getInt(0)
。
但是,分配4096个字节来保存整数是过度的。为什么不使用专门为此目的设计的IntByReference
类?
int fH; /* file handle */
int error; /* error code */
IntByReference pFH = new IntByReference(); // allocates memory for the int
error = CLibrary.INSTANCE.spssOpenWrite("mydata.sav", pFH);
// TODO: test error value before proceeding
fH = pFH.getValue();