JNA指向存储文件句柄的指针

时间:2017-04-12 09:44:20

标签: c jna spss

我正在使用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的价值。

1 个答案:

答案 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();