2
我有一個包含用C一些字符指針的結構:返回和訪問結構的對象的陣列中的JNA
struct inputsheet
{
char* TestCaseID[MAX_TEST_CASES];
char* Description[MAX_TEST_CASES];
};
我有一個功能,是結構的對象的返回數組:
struct inputsheet* getapi(char *docname);
現在我想在Java中使用它。我怎樣才能處理這個結構對象的數組?我能夠處理單個對象,但不能處理數組。
對於單個對象我的C代碼是在這裏:
public class str3 extends com.sun.jna.Structure implements com.sun.jna.Structure.ByReference {
public Pointer a1;
public Pointer b2;
public Pointer c3[]=new Pointer[10];
}
訪問它:
str2 s2=CLibrary.INSTANCE.parseid(xmlFile1);
for(Pointer p1:s2.testCaseID) {
if(p1!=null)
{
System.out.println(p1.getString(0));
}
}
編輯
\\c code
struct str3{
char *a;
char *b;
char *ab[10];
}
\\jna implementation
package parser;
import com.sun.jna.Pointer;
public class str3 extends com.sun.jna.Structure implements com.sun.jna.Structure.ByReference{
public Pointer a1;
public Pointer b2;
public Pointer c3[]=new Pointer[10];
}
\\calling it
import com.sun.jna.Native;
import com.sun.jna.Pointer;
class ab{
interface CLibrary extends Library{
CLibrary INSTANCE = (CLibrary) Native.loadLibrary("chardll",
CLibrary.class);
str3 getStruct();
}
public static void main(String[] args) {
int size = 5;
str3 a=CLibrary.INSTANCE.getStruct();
str3[] ab=(str3[])a.toArray(size);
System.out.println(ab[0].a1.getString(0));
}
}
這是給垃圾值作爲輸出,,我必須更新我的代碼才能獲得正確的輸出結果。
使用後,我仍然無法得到所需的結果要麼給我垃圾的價值(萬一我使用BYREFERENCE),否則它給予NULL指針異常(在ByValue的情況下) – Nitesh 2013-03-17 16:28:19
字符串可用於我的指針是const,但它不在我的情況下 – Nitesh 2013-03-17 16:29:17
由於你的本地函數返回struct *而不是'struct',所以使用'Structure.ByValue'是不正確的。你需要更清楚地表明你嘗試過的東西;你的問題引用'inputsheet','str3'和'str2',它們之間沒有明顯的關係。 – technomage 2013-03-17 19:37:06