存储文件句柄的 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();
我正在使用 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();