JAVA -JNA C 函数修改双精度数组

JAVA -JNA C function modify array of doubles

我在将一个双精度数组从 Java 传递到一个使用 JNA 的 C 函数时遇到问题,该函数通过引用该数组来修改值。

C 示例函数:

void examplefunct(double* dd) //<-- this wants an array of 6 doubles

此函数需要 6 个双精度数组,现在我已经尝试使用

DoubleByReference[] jdd = new DoubleByReference[6];

在 JNA 实现中,但我无法从数组中获取值。 老实说,我认为我的实现是不正确的,因为我是 JNA

的新手,所以一个基本的例子将不胜感激

提前致谢!

有几种方法可以映射此函数:

public interface MyLibrary extends Library {
    void examplefunct(Pointer dd);
    void examplefunct(java.nio.Buffer dd);
    void examplefunct(double[] dd);
}

如果分配 com.sun.jna.Memory 的实例,则可以使用各种内存访问器函数将双精度值写入缓冲区。

如果直接使用NIO ByteBuffer,可以使用第二个例子

如果您使用 Java 原始数组,那么 JNA 会为您执行从 Java 到本机内存的复制。

它们中的每一个都有不同的性能特征,因此如果性能令人担忧,您应该在您的环境中进行测试。