我会对以下来源有疑问,我对其进行了简化以使其更容易理解。
c代码
struct test
{
int test1;
};
int create_context(test **context);
int use_context(test *context);
爪哇代码
public static class test extends Structure {
public int test1;
public test() {
super();
}
public test()(Pointer p) {
super(p);
}
protected List getFieldOrder() {
return Arrays.asList("test1");
}
public test(int test1) {
super();
this.test1 = test1;
}
public static class ByReference extends test implements Structure.ByReference {
};
public static class ByValue extends test implements Structure.ByValue {
};
}
public static native int create_context(PointerByReference context);
public static native int use_context(TestLibrary.test context);
我像这样访问java中的结构,
PointerByReference contextPointer = new PointerByReference();
int status = INSTANCE.create_context(contextPointer);
test context = new test(contextPointer.getValue());
status = INCTANCE.use_context(context);
当我在 Visual Studio 中调试它时,我已经看到,对于 create_context 和 use_context 使用了不同的内存地址。当我设置 int test1 值时,它是正确的,但我想知道,为什么上下文的地址不同。有人有想法吗?这不会导致内存问题吗?或者任何想法我做错了什么?谢谢瓦伦蒂娜