如何模拟对象指针

How to simulate objectpointers

我有一个无法使用 jna 修改的 dll 外观对象。 dll 保持内部状态并且应该始终是同一个实例。 外观对象也保持状态。

如果我理解正确,如果我更改了一个对象的非基元,该更改将不会遍历回调用者,因为指向该非基元的内部指针可能已更改。

有没有比传递包装对象更好的方法来保留所有更改? 例如:

public class Facade

{
    private final Dll dll;
    public Facade(int foo, int bar)
    {
        //init the Facade
        this.dll = new Dll();
    }
    int foo(int bar)
    {}
    // more methods
}

public class Wrapper
{
    public final Facade facade;

    public Wrapper(Facade facade)
    {
        this.facade = facade;
    }
}

public static class App
{
    public static int main(String[] args)
    {
        Facade fac = new Facade(0,0);
        Wrapper pointerSim = new Wrapper(fac);

        methodA(pointerSim);
        methodB(pointerSim);
    }
}

以 pointerSim 的目标反映 methodA 和 B 之后对 Member 类 和字节数组的变化。

还是我的伪装?

您可以使用简单的 Pointer 传递本机对象。 class 有许多访问器方法可以从基指针将偏移量读入内存。

如果您希望特定 class 指针的类型安全,您可以使用

创建自己的指针类型
public class Facade extends PointerType { 
    public Facade() { }
    public Facade(Pointer p) { }
}