我正在使用 JNA 并发现它非常直接地用于从本机库中检索数据,但很难理解如何以相反的方式进行操作,即将结构化数据传递给本机方法。
我将使用我试图调用的库的一部分中的一个小例子。
本机库 typedef 如下:
typedef struct CreateInfo {
int count; // Number of queue infos
const QueueInfo* queues; // Zero-or-more queue info structures
} CreateInfo;
typedef struct QueueInfo {
int count; // Number of queue priorities
const float* priorities; // 'array' of queue priorities
} QueueInfo;
所以我们有一个CreateInfo指代数字的一个,其中的QueueInfo每一个都包含一个浮点值列表。
这些结构的简单 JNA 实现可能如下(为简洁起见,省略了字段顺序、构造函数等):
public class CreateInfo extends Structure {
public int count;
public QueueInfo.ByReference queues;
}
public QueueInfo extends Structure {
int count;
public Pointer priorities;
}
所以:
JAN 映射(故意)很幼稚,但它们真的很愚蠢吗?如果是这样,逻辑类型是什么?
如果我已经有一个数组,QueueInfo
我可以简单地将指针设置为该数组的第一个元素吗?还是我必须使用分配一个数组Structure::toArray
?这些结构除了默认之外没有构造函数,它们应该有吗?
我有队列优先级浮点数组,但如何设置指针?它实际上应该是指针还是其他东西?一个浮动[]?
我可以找到很多关于 SO 和一般互联网的问题,用于从本地库接收结构,但对于传递结构化数据的问题相对较少。我发现的例子都对同一个问题使用了不同的方法,这些方法看起来很复杂,但应该很简单(?)所以我对“正确”的方法感到迷茫。
我怀疑我没有问正确的问题,这可能意味着我错过了有关 JNA 的一些基本知识。
希望有好心人能指出上面简单的 JNA 代码有什么问题,以及如何在 Java 端填充数据。
慕田峪4524236
相关分类