मैं जेएनए के साथ सी में एक छोटा ** कॉल करने का प्रयास करता हूं।जेएनए दो आयामी सरणी
सी इस तरह दिखता है:
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]);
}
}
}
पासिंग एक छोटी [] [] JNA काम नहीं करता है से।
जेएनए दस्तावेज कहता है "मूल बहु-आयामी सरणी को मैप करने के लिए, एकल-आयामी जावा सरणी का उपयोग करें" लेकिन यह काम नहीं करता है।
'nativeLib.compute (नया छोटा [] {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); }
मैं भी करने की कोशिश की:
Pointer pointer = new Memory(4*Short.SIZE); Pointer pointer1 = new Memory(2*Short.SIZE); pointer1.setShort(0,(short)1); pointer1.setShort(Short.SIZE,(short)2); Pointer pointer2 = new Memory(2*Short.SIZE); pointer2.setShort(0,(short)3); pointer2.setShort(Short.SIZE,(short)4); pointer.setPointer(0, pointer1); pointer.setPointer(2*Short.SIZE, pointer2); nativeLib.compute(new PointerByReference(pointer), 2,2);
लेकिन मैंमिल
क्या किसी के पास कोई विचार है? मैं सी हस्ताक्षर नहीं बदल सकता, मुझे इस लघु **
से बहुत कुछ सौदा करना है।
समाधान
मैं finnaly succed! ऐसा करने:
short[][] in = {
{1,2,3},
{4,5,6},
};
Pointer[] data = new Pointer[in.length];
for(int i=0;i<in.length;i++) {
data[i] = new Memory(2*Short.SIZE);
data[i].write(0, in[i], 0,in[0].length);
}
nativeLib.compute(data, in.length,in[0].length);
परिणाम के साथ
:
in[0][0] = 1
in[0][1] = 2
in[0][2] = 3
in[1][0] = 4
in[1][1] = 5
in[1][2] = 6
धन्यवाद एक बहुत!
"पॉइंटर्स की सरणी" संस्करण आपके लिए काम करने के लिए खुशी हुई! –