JNA 结构和指针映射

Posted

技术标签:

【中文标题】JNA 结构和指针映射【英文标题】:JNA Struct and Pointer mapping 【发布时间】:2009-01-30 02:46:56 【问题描述】:

如何将下面的函数映射到java?

VOID WriteToStruct(BOOL *Status, STRUCT_MSG RecBuff)

这个函数的作用: 1) 填充结构 RecBuff 2) 更新状态

如何映射到Java中的布尔指针并访问函数更新的结构数据?

【问题讨论】:

【参考方案1】:

我正在搜索有关 JNA 和结构的另一个问题,Google 将我重定向到这里。我希望这会有所帮助。

来自JNA API

要按值传递结构,首先 定义结构,然后定义一个 实现的空类 结构.按值。使用 ByValue 类作为参数或返回类型。

// Original C code
typedef struct _Point 
  int x, y;
 Point;

Point translate(Point pt, int dx, int dy);

// Equivalent JNA mapping
class Point extends Structure 
    public static class ByValue extends Point implements Structure.ByValue  
    public int x, y;

Point.ByValue translate(Point.ByValue pt, int x, int y);
...
Point.ByValue pt = new Point.ByValue();
Point result = translate(pt, 100, 100);

【讨论】:

【参考方案2】:

您可以使用 ByReference 类通过引用传递值。假设 BOOL 是一个 int,您可以使用 IntegerByReference。

【讨论】:

以上是关于JNA 结构和指针映射的主要内容,如果未能解决你的问题,请参考以下文章

使用 JNA 将本机 C 函数映射到 Java 接口时的指针问题

java高级用法之:JNA中的Memory和Pointer

JNA 参考传递结构帮助

使用 JNA 在 Clojure 中按值获取和传递结构

结构 JNA 返回错误值

如何为双指针结构参数应用 SWIG 类型映射