我无法将Java中的双打数组传递给带有JNA的C函数,该函数通过引用数组来修改值。
C示例函数:
void examplefunct(double* dd) //<-- this wants an array of 6 doubles
这个函数需要一个6个双打的数组,现在我尝试使用
DoubleByReference[] jdd = new DoubleByReference[6];
在JNA实现中,但我没有从数组中获取值。 老实说,我认为我的实施是不正确的,因为我刚接触JNA,所以我会非常感激一个基本的例子
提前致谢!
答案 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到本机内存的复制。
每个都具有不同的性能特征,因此您应该在您的环境中测试性能是否值得关注。