jnrffiutf8string在传递到c之后是否以零结尾?

mbjcgjjk  于 2021-06-29  发布在  Java
关注(0)|答案(0)|浏览(198)

有人能帮忙吗,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中的所有字段
或许还有别的办法
谢谢您

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题