存储文件句柄的 JNA 指针

JNA pointer to store file handle

我正在使用 JNA 在 Java.

中使用一个 .dll

我尝试使用的方法是这个(在 C 中):

int fH; /* file handle */
int error; /* error code */
error = spssOpenWrite("mydata.sav", &fH);

它创建一个新文件并将文件句柄存储在 hFile 中,returns 一个错误代码。 我不确定如何用 JNA 重新创建它,我试过像这样使用指针对象:

Pointer fH = new Memory(4096);
int error = 0;
error = CLibrary.INSTANCE.spssOpenWrite("mydata.sav", fH);

但这不会改变 fH 的值。

fH 的 "value" 与您最初定义的内存地址相同。但是,如果您尝试读取该值,您应该会得到结果,例如 fH.getInt(0).

但是,分配 4096 个字节来保存一个整数是多余的。为什么不使用专门为此目的设计的 IntByReference class?

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