0
나는 jna를 사용하여 수정할 수없는 dll에 대한 facade 개체를 hava에 저장합니다. dll은 내부 상태를 유지하며 항상 동일한 인스턴스 여야합니다. 파사드 오브젝트는 상태를 유지합니다.objectpointers 시뮬레이션하는 방법
만약 내가 올바르게 이해한다면, 객체의 비 기본 객체를 변경하면, 그 비 기본 객체에 대한 내부 포인터가 변경되었을 수 있기 때문에 호출자로 되돌아 가지 않습니다.
모든 변경 사항을 유지하기 위해 wrapper 객체를 전달하는 더 좋은 방법이 있습니까? 예 : 회원 클래스와 바이트 배열에 methodA 후 변화와 B를 반영 pointerSim의 목표와
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);
}
}
.
내 허위가 거짓입니까?
JNA와 함께 자신의 포인터 타입을 만들 수는 일반적으로 (기본 측에서 변경 될 수 있습니다 필드를 식별 할 수있는'volatile' 키워드를 사용하여 다른 스레드); ('read()/write()')에서 필드를 쓰는 것을 피하지만 write는 여전히'writeField()'로 수행 할 수 있습니다. – technomage
또한 일반 Pointer (또는 자신의'PointerType')를 사용하여 몇 가지 유형 안전성을 가질 수 있으며, 메모리 접근 메서드를 사용하여 필요에 따라 데이터를 밀어 넣거나 가져올 수 있습니다. – technomage
@technomage 좀 더 확대 할 수 있습니까? – gismo