孤独的旅行者磕磕绊绊:看到答案的评论。
...
为本机库编写Java包装器。设备生成数据样本并将其存储为结构。访问它们的两种本地方式:要么使用getSample(&sampleStruct)
请求,要么设置回调函数。现在,这是做什么的工作:
问题:尝试使用回调参数(应该是结构)执行任何操作会导致无效的内存访问"。将结构声明为结构就是这样,所以我将其声明为指针。尝试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;
}
但我真的更喜欢整个结构。
这显然不是一个热门话题,我确实有一个有效的解决方案,因此描述并不完整。如果需要,将复制其他可能有用的内容。感恩过早地延长了。