【问题标题】:Are JNA Objects pass by reference or by value inside java codeJNA 对象是通过引用传递还是在 java 代码中通过值传递
【发布时间】:2017-01-27 05:44:33
【问题描述】:

我可以传递 JNA 对象以在 java 中进行初始化和写入吗?

-> 是否有可能有一个初始化结构的每个成员的方法和其他方法来填充数组等等。

我在谷歌上找不到答案/也没有https://jna.java.net/

【问题讨论】:

  • “JNA 对象”是什么意思? JNA 提供了操作原生函数和数据的工具。
  • 例如 struct 对象,我是在 java 内部传递同一个 struct 还是传递同一个 struct 的副本 -> 我是操作同一个对象还是创建值的副本有一个新的内存位置。

标签: java pass-by-reference jna


【解决方案1】:

您可以将本机内存与 Java 对象同步,但您不能将 Java 对象覆盖在本机内存上,并且您不应该将 Java 对象内存直接暴露给本机代码。 JNA 所做的是将本机内存与 Java 对象相关联,并提供方法来同步两者。

原始内存:

Pointer memory = new Memory(128);
memory.setInt(0, 1234)

结构化数据:

MyStructure s = new MyStructure();
s.int_field = 1234;
s.write();

s = new MyStructure(native_pointer);
s.read();
System.out.println("Field: %s", s.int_field);

【讨论】:

  • 您能否提供一个简单的示例,应该如何进行同步?另外,如果我在 java 中传递一个结构对象并更改值,我是更改实际值还是更改唯一的本地版本(因为 java 通常可以工作)
猜你喜欢
  • 2020-04-01
  • 2015-02-24
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 2014-05-18
  • 2014-02-08
相关资源
最近更新 更多