如何模拟对象指针
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) { }
}
我有一个无法使用 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) { }
}