繁体   English   中英

如何模拟对象指针

[英]How to simulate objectpointers

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

如果我理解正确,如果我更改了对象的非基本体,则该更改将不会遍历到调用方,因为指向该非基本体的内部指针可能已更改。

是否有比绕过wrapper对象更好的方法来保持所有更改? 例如。:

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的目标为例,它反映了方法A和B对成员类和字节数组的更改。

还是我的假装是假的?

您可以使用简单的Pointer传递本机对象。 该类具有许多访问器方法,可从基本指针将偏移量读取到内存中。

如果要围绕特定类的指针进行类型安全,则可以使用以下方法创建自己的指针类型:

public class Facade extends PointerType { 
    public Facade() { }
    public Facade(Pointer p) { }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM