2011-11-08 3 views
0

I 다음 C++ 코드 가지고JNA - 구조 만들기 오류

typedef struct { 
    int TabSock[1024]; 
    DWORD TabIP[1024]; 
    int NumSockConec; 
} TTABSOCK; 
typedef TTABSOCK *PTABSOCK; 

그리고 함수 :

TTABSOCK __stdcall mt_connectlist(void); 

위 함수는 DLL에있다. JNA를 사용하여 Java에서 Struct을 생성하려고하는데 성공하지 못합니다. 내 programm 그 오류가 생기고 그 원시 기능을 실행하려고하면 닫힙니다. 다음은

자바/JNA의 구조체에 대한 내 구현입니다 : 내가 잘못을

public class TTABSOCK extends Structure { 

    public int[] TabSock = new int[1024]; 
    public DWORD[] TabIP = new DWORD[1024]; 
    public int NumSockConec; 
} 

을 뭐하는 거지?

고마워요.

답변

0

나는

public static class TTABSOCK extends Structure { 

    public int[] TabSock = new int[1024]; 
    public DWORD[] TabIP = new DWORD[1024]; 
    public int NumSockConec; 

    public static class ByReference extends TTABSOCK implements Structure.ByReference {}; 
    public static class ByValue extends TTABSOCK implements Structure.ByValue {}; 
} 
+0

안녕하세요! 불행하게도 작동하지 않습니다. – eliangela

+0

잡히면 예외는 무엇입니까? –

+0

해당 기능을 호출하면 JVM이 충돌합니다. 나는 몇몇 개발자들과 이야기를 나누었고 그들은 같은 문제가 있다고 말했다. 우리는 DLL에 오류가 있다고 생각합니다. 다른 기능을 사용하려고합니다. 고마워요 – eliangela

0

당신은 당신이 값으로 구조를 반환하고 있는지 확인해야합니다 .. 당신이 ... 아니 그것을 잊지, 그것은 안 문제 배열을 초기화하지한다고 생각합니다. 기본적으로 JNA 구조는 인수와 반환 형식에서 "구조체 *"로 처리되므로이 경우 대신 "구조체"동작을 나타내야합니다.

public interface MyLibrary extends StdCallLibrary { 
    class TTABSOCK extends Structure { 
     public static class ByValue extends TTABSOCK implements Structure.ByValue { } 
     // ... 
    } 
    TTBASOCK.ByValue mt_connectlist(); 
} 
+1

안녕하세요! 나는 값으로 구조를 반환했지만 작동하지 않습니다. 나는 몇몇 개발자들과 이야기를 나누었고 그들은 같은 문제가 있다고 말했다. 우리는 DLL에 오류가 있다고 생각합니다. 다른 기능을 사용하여 해결했습니다. 고마워. – eliangela

+0

확인해야 할 또 다른 사항은 전체 구조 크기 및 정렬입니다. 이들이 원시 코드와 Java 코드간에 일치하지 않으면 가치에 의한 구조가 작동하지 않습니다. 원시 코드의 "sizeof (TTBASOCK)"과 Java의 TTBASOCK.size()를 비교하십시오. – technomage