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

时间:2015-06-01 23:27:06

标签: java arrays jna

我无法将Java中的双打数组传递给带有JNA的C函数,该函数通过引用数组来修改值。

C示例函数:

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

这个函数需要一个6个双打的数组,现在我尝试使用

DoubleByReference[] jdd = new DoubleByReference[6];

在JNA实现中,但我没有从数组中获取值。 老实说,我认为我的实施是不正确的,因为我刚接触JNA,所以我会非常感激一个基本的例子

提前致谢!

1 个答案:

答案 0 :(得分:0)

您可以通过以下几种方式映射此功能:

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到本机内存的复制。

每个都具有不同的性能特征,因此您应该在您的环境中测试性能是否值得关注。