我尝试用JNA在C中调用短**.
C看起来像这样:
void compute(short** in, int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf("in[%d][%d] = %d\n", i,j, in[i][j]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
从JNA传递短[] []不起作用.
JNA文档说"要映射本机多维数组,使用一维Java数组",但它不起作用.打电话的时候
'nativeLib.compute(new short [] {1,2,3,4},2,2); 我得到:java.lang.Error:com.sun.jna.Native.invokeVoid(本机方法)的内存访问无效
似乎需要一个PointerByReference,我试图用PointerByReference填充PointerByReference,它包含短值,但它不起作用:
Pointer pointerOfArray = new Memory(row * col * Native.getNativeSize(Short.TYPE));
for(int i=0;i<row;i++) {
Pointer pointer = new Memory(col * Native.getNativeSize(Short.TYPE));
for(int j=0;j<col;j++) {
pointer.setShort(j*Native.getNativeSize(Short.TYPE), in[i][j]);
}
pointerOfArray.setPointer(i*row*Native.getNativeSize(Short.TYPE), pointer);
}
Run Code Online (Sandbox Code Playgroud)我也尝试过:
Pointer pointer = new …Run Code Online (Sandbox Code Playgroud)