[英]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.