【问题标题】:JNA pointer to store file handle用于存储文件句柄的 JNA 指针
【发布时间】:2017-04-12 09:44:20
【问题描述】:

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

【问题讨论】:

    标签: c jna spss


    【解决方案1】:

    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,因为我认为这是正确的想法,但并没有尝试将该值设置为整数并使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多