2014-10-09 1 views

답변

1

일반적으로 매개 변수를 전달할 때 Structure.ByReference을 명시 적으로 지정할 필요는 없습니다. 매개 변수 인 경우 .ByReference을 서명에서 삭제하면 정상적으로 작동합니다. 이 필드는 구조 내에서라면

는 다음 JNA는 필요가 명시 적으로 .ByReference을 제공하는 것이이 경우 값을 기준으로 Structure을 해석합니다.

이렇게하는 것이 하나의 방법입니다.

class MyStructure extends Structure { 
    class ByReference extends MyStructure implements Structure.ByReference { 
     public ByReference() { } 
     public Byreference(Pointer p) { super(p); read(); } 
    } 
    public MyStructure() { } 
    public MyStructure(Pointer p) { super(p); read(); } 
} 

MyStructure s; 
// ... 
MyStructure.ByReference ref = new MyStructure.ByReference(s.getPointer()); 
+0

예, 구조 내의 필드이며 JNA 구조체가 있습니다. 이제 구조체 필드에 할당 할 수 있도록 Structure.ByReference로 변환해야합니다. –

+0

JNA는 네이티브 메모리에서 포함 구조를 읽을 때 필드를 자동으로 초기화합니다. 직접 초기화하려면 위의 패턴을 사용하여 MyStructure.ByReference 인스턴스를 만들고 초기화하거나 기존 구조 또는 메모리 블록에서 초기화해야합니다. – technomage

관련 문제