有人能帮忙吗,jnr ffi文档不多)
我需要将结构从java传递到c,然后再传递回来
结构包含混合字段(char[],int,long…):
typedef struct test_fields{
char field1[10];
int field2;
char field3[10];
} TEST_FIELDS;
在java中,我创建了一个从jnr.ffi.struct扩展而来的类,并添加了字段:
public class TestStruct extends Struct {
public static final int SIZE = 10;
public static final int SIZE2 = 10;
public final UTF8String field1 = new UTF8String(SIZE);
public final Signed32 field2= new Signed32();
public final UTF8String field3 = new UTF8String(SIZE2);
protected TestStruct(Runtime runtime) {
super(runtime);
}
}
已创建具有c调用函数签名的接口:
public static interface App{
int main(TestStruct s);
}
像这样加载和调用我的测试库:
App app1 = LibraryLoader.create(App.class).load("app.so");
Runtime runtime = Runtime.getRuntime(app1);
TestStruct t = new TestStruct(runtime);
t.field1.set("---------8");
t.field2.set(-1);
t.field3.set("---------9");
int ret = app1.main(t);
但当我在c中打印字段时,我看到两个UTF8字符串中的最后10个符号都是空的,不是从java传递的,我只看到9个破折号。equal result给出teststruct.tostring():(调用app1.main后)
TestStruct {
SIZE = 10
SIZE2 = 10
field1 = ---------
field2 = -1
field3 = ---------
}
为什么utf8string中的最后一个符号丢失了?
我的方法正确吗?
如何将所有utf8string内容按大小传递给c?并正确地检索java中的所有字段
或许还有别的办法
谢谢您
暂无答案!
目前还没有任何答案,快来回答吧!