0
我hava一個DLL的外觀對象,我不能用jna修改。 該DLL保持內部狀態,並應始終是相同的實例。 立面對象保持狀態。如何模擬objectpointers
如果我理解正確,如果我更改了對象的非原語,則該更改將不會返回給調用者,因爲指向該非原語的內部指針可能已更改。
有沒有更好的方式,然後繞過一個wrapperobject保持所有的變化? 例如:
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的目標。
或者我的僞裝是假的?
JNA使用'volatile'關鍵字,以確定其可在本機端更改領域(通常在另一個線程);它避免了在通用同步方法('read()/ write()')中寫入這些字段,但寫入仍然可以通過writeField()來執行。 – technomage
你也可以使用通用的'Pointer'(或者你自己的'PointerType',這樣你就有一些類型的安全性),並且使用內存訪問器方法來根據需要推送/抽取數據。 – technomage
@technomage可以擴展一下嗎? – gismo