を参照することによって構造体を渡すために:Javaではどのように私はこの関数を呼び出したいJNA
typedef struct
{
int a;
int b;
} mystruct;
同等のコードは次のとおりです。Cで定義されて
extern "C" xxx_SERVICE_API int initSocket(socketStruct* skStruct);
++ dll.socketStructは、以下に定義された構造であります:
public interface MyDllClass extends Library {
public static class MyStructure extends Structure {
public static class ByReference extends MyStructureRef
implements Structure.ByReference{
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[]{"a","b"});
}
public int a;
public int b;
}
//Native function
int initSocket (MyStructure.ByReference sks);
MyDllClass INSTANCE = (MyDllClass)Native.loadLibrary("Mydll",
MyDllClass.class);
}
このネイティブ関数を参照として構造体でパラメータとして呼び出すにはどうすればよいですか? ありがとうございます
ありがとうございました。あなたと一緒によると、私は構造体にコンストラクタを追加します。ネイティブ関数を呼び出すときに
MyStructure mySocket = new MyStructure();
MyDllClass.INSTANCE.initSocket(mySocket);
このコードが原因NULLポインタ例外の失敗:
public interface MyDllClass extends Library {
public static class MyStructure extends Structure {
public MyStructure() {
idModule = 0;
nbModules = 0;
nbQueueInModule = 3;
portList = new int[128];
serverList = new char[128][20];
}
@Override
protected List<String> getFieldOrder() {
return Arrays.asList(new String[]{"a","b","portList","serverList"});
}
public int a;
public int b;
public int[] portList;
public char[][] serverList;
}
//Native function
int initSocket (MyStructure.ByReference sks);
MyDllClass INSTANCE = (MyDllClass)Native.loadLibrary("Mydll",
MyDllClass.class);
}
がメインで、私はこのコードを書きました。 アイデアはありますか?