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

C 指向存储文件句柄的JNA指针,c,jna,spss,C,Jna,Spss,我使用JNA在Java中使用.dll 我尝试使用的方法如下(在C中): 它创建一个新文件,并将文件句柄存储在hFile中,并返回一个错误代码。 我不确定如何使用JNA重新创建它,我尝试使用指针对象,如下所示: Pointer fH = new Memory(4096); int error = 0; error = CLibrary.INSTANCE.spssOpenWrite("mydata.sav", fH); 但这不会改变fH的值。fH的“值”将与您最初定义的内存地址相同。但是,如果您试

我使用JNA在Java中使用.dll

我尝试使用的方法如下(在C中):

它创建一个新文件,并将文件句柄存储在hFile中,并返回一个错误代码。 我不确定如何使用JNA重新创建它,我尝试使用指针对象,如下所示:

Pointer fH = new Memory(4096);
int error = 0;
error = CLibrary.INSTANCE.spssOpenWrite("mydata.sav", fH);
但这不会改变fH的值。

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

谢谢,就这样。我尝试了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();