C でいくつかの char ポインターを含む構造体があります。
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));
}
}
出力としてガベージ値を与えています。正しい出力を得るためにコードを更新する必要があります..