JNA:使用回调函数参数(struct)

时间:2016-09-13 12:55:41

标签: jna

孤独的旅行者磕磕绊绊:看到答案的评论。

...

为本机库编写Java包装器。设备生成数据样本并将其存储为结构。访问它们的两种本地方式:要么使用getSample(&sampleStruct)请求,要么设置回调函数。现在,这是做什么的工作:

  • 轮询方法确实填充了JNA结构
  • 设置
  • 后调用回调函数
  • 事实上,我目前正在从回调函数
  • 中获取示例

问题:尝试使用回调参数(应该是结构)执行任何操作会导致无效的内存访问"。将结构声明为结构就是这样,所以我将其声明为指针。尝试Pointer.getInt(0)会导致无效的内存访问。那么我将参数声明为int,并传递一个int;事实上,它看起来非常像我想要的结构的第一个字段!那么它是否意味着struct 在该地址但在Java有时间访问它之前消失了?

这就是我现在正在做的事情:

public class SampleCallback implements Callback{
    SampleStruct sample;

    public int callback(Pointer refToSample) throws IOException{
        lib.INSTANCE.GetSample(sample); // works no problem
        adapter.handleSample(sample);
        return 1;
    } ...

但这些都没有:

public int callback(SampleStruct sample) throws IOException{
        adapter.handleSample(sample);
        return 1;
    }

...

public int callback(Pointer refToSample) throws IOException{
    SampleStruct sample = new SampleStruct();
    sample.timestamp = refToSample.getInt(0);
    ...
    adapter.handleSample(sample);
    return 1;
}

此外,这确实提供了时间戳,

 public int callback(int timestamp) throws IOException{
        System.out.println("It is " + timestamp + "o'clock");
        return 1;
 }

但我真的更喜欢整个结构。

这显然不是一个热门话题,我确实有一个有效的解决方案,因此描述并不完整。如果需要,将复制其他可能有用的内容。感恩过早地延长了。

0 个答案:

没有答案
相关问题