通过指针将C结构转换为Java对象

时间:2012-05-10 14:13:37

标签: java native jna

我可以访问指向C结构的指针的地址。我如何得到它并不重要,我验证并且收到正确。

C定义如下:

union Data_u
{
  long long u_integer;
  struct another_s u_another;
};
struct Data_s
{
  unsigned long s_Type;
  union Data_u s_Value;
};

我需要将Data_s*映射到Java中的类似结构。 我通过互联网搜索了一下我认为可以使用的JNA库。

我没有找到使用JNA在Java结构中转换C结构的正确方法。我看到我可以定义一个对应的Java结构,但是,JNA用于访问本机调用而不是直接结构转换,尽管它支持它。

具体而言,我找到了一些方法,例如:

static Structure updateStructureByReference(Class type, Structure s, Pointer address)

...哪个允许我 - 我认为 - 用我的指针地址填充结构。该方法具有访问权限,从此我将其修改为 public ,这意味着我将开始黑客攻击库...

是否有更简单的方法来解决问题,可能是在JNA本身或者可能以其他方式解决?

1 个答案:

答案 0 :(得分:0)

使用JNA,您可以轻松地将您的struct按值传递给Java,更新它并将其发回(按值)。

我很确定不可能有Java对象,它由指向C结构的指针映射,因为java和C使用不同的内存模型