I am facing below issue/error when I try to map a two dimensional array in JNA Mapping
Public Class TestMultiDimensionArray extends Structure{
public String testArray[][];
public interface CTrainLibrary extends Library {
void processArray(testMultiDimensionalArray);
}
}
in main..
TestMultiDimensionalArray test = new testMultiDimensionalArray();
//Initialaize array
test.testArray= {{"ABC","EFG"},
{"TEST1","TEST2"}
};
//....some code here
CLibrary lib = (CTrainLibrary)Native.loadLibrary("c", CLibrary.class);
lib.processArray(testMultiDimensionalArray);
Error message
Exception in thread "main" java.lang.NullPointerException
at java.lang.reflect.Array.getLength(Native Method)
at com.sun.jna.Native.getNativeSize(Native.java:1066)
at com.sun.jna.Structure.getNativeAlignment(Structure.java:1283)
at com.sun.jna.Structure.getNativeAlignment(Structure.java:1308)
at com.sun.jna.Structure.deriveLayout(Structure.java:1150)
at com.sun.jna.Structure.calculateSize(Structure.java:982)
at com.sun.jna.Structure.allocateMemory(Structure.java:363)
at com.sun.jna.Structure.ensureAllocated(Structure.java:339)
at com.sun.jna.Structure.ensureAllocated(Structure.java:329)
at com.sun.jna.Structure.write(Structure.java:701)
at com.sun.jna.Structure.autoWrite(Structure.java:1923)
at com.sun.jna.Function.convertArgument(Function.java:505)
at com.sun.jna.Function.invoke(Function.java:297)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
http://osdir.com/ml/java.jna.user/2008-05/msg00075.html states it is not implemented by then. Can anyone confirm whether the same is the case still now?
What you use depends on the nature of your native multidimensional array.
If your native array looks like either of these:
Then you can use
Memory
,int[]
, or an NIOBuffer
of sizeROWS*COLS
, and you just need to ensure that you iterate the single block of memory appropriately.