2012-06-07 1 views
0

나는 반환 형식자바 JNA C++ 쌍 방법 매핑

std::pair<int, string> 

내가 JNA을 사용하고 내가 한 쌍의 구조가 구조 기본 클래스를 사용하여 매핑 할 수있는 방법을 궁금 해서요과 방법을 공개하는 간단한 DLL을 가지고있다. Pair<T,E> extends Structure과 같은 것을 할 수 있습니까?

감사합니다.

답변

1

짧은 대답은 아니오입니다. C++ 템플릿을 Java Generics에 매핑 할 수 없습니다. 그들은 비슷하게 보이지만 완전히 다른 것들입니다.

프로세스가 수동이지만 프로세스가 더 길지만 대답은 네일 수 있습니다. 이것이 단일 플랫폼에서 실행될 예정이라면 문제가 될만한 가치가있을 것입니다.

먼저 쌍의 데이터 오프셋을 결정한 다음 페어 데이터 오프셋에 해당하는 오프셋이있는 필드가있는 JNA 구조를 만듭니다.

// C++ 
typedef std::pair<int,string> mypair; 
mypair* p = (mypair *)0; 
offset_t PADDING1 = (char*)&p->first - (char*)p; 
offset_t PADDING2 = (char*)&p->second - (char *)p; 

// Java 
class MyPair extends Structure { 
    public byte[] = byte[PADDING1]; // omit if PADDING1 is zero 
    public first; 
    public byte[] = byte[PADDING2]; // omit if PADDING2 is zero 
    public second; 
} 
+0

답변 해 주셔서 감사합니다. 나는 다른 접근법으로 끝을 맺었다. 두 필드의 구조체를 만들었고 (C++ 메서드에서 java로 반환) 자바에서는 미러 구조를 만들고 참조 구문을 사용하여 반환 된 구조체에 액세스했습니다. – Radu