2016-08-04 3 views
0

나는이 같은 서명으로 함수를 호출해야합니다(JNA에서) 해당 배열에 대한 포인터에서`struct *`의 배열을 어떻게 추출합니까?

size_t findDevices(devStruct_t **devs[]); 

몇 가지 예를 들어 C 코드는 다음과 같은 기능을 사용

devStruct_t **arrOfPointers; 
size_t size; 
size = findDevices(&arrOfPointers); 
for(size_t i = 0; i < size; i++) { 
    printf("devId:%d\n", arrOfPointers[i]->id); 
} 

가 어떻게 JNA를 사용하여 Java에서 위의 코드를 복제 할 것인가? 나는 구조에 액세스하는 방법을 모른다,

NativeLong size; 
PointerByReference stdevs = new PointerByReference(); 
size = libstlink.stlink_probe_usb(stdevs); 

그러나 :

NativeLong findDevices(PointerByReference devs); 

내가 충돌없이 실행할 수 있습니다 :

은 내가 JNA 기능 서명을 같이한다고 생각합니다.

+0

그러면 "PointerByReference를 역 참조하는 방법"또는 비슷한 것으로해야합니다. – Fildor

+0

아마도 도움이 될 수 있습니다. http://www.eshayne.com/jnaex/index.html?example=7 – Fildor

답변

0

로 정의된다

size_t stlink_probe_usb(stlink_t **stdevs[]); 

(이다 stdevs.getValue()). 이를 사용하여 포인터의 배열을 추출한 다음 구조체를 초기화하십시오.

Pointer[] ptrs = stdevs.getValue().getPointerArray(0, size.intValue()); 
DevStruct[] array = new DevStruct[size.intValue()]; 
for (int i=0;i < array.length;i++) { 
    array[i] = new DevStruct(ptrs[i]); 
} 

public class DevStruct extends Structure { 
    public DevStruct(Pointer p) { 
     super(p); 
     read(); 
    } 
} 
0

함수 정의, 당신은 in source code을 볼 수있는 해당 유형 당신은 포인터를 "반환"당신의 배열의 시작 주소를 가지고 this source code

struct _stlink { 
    struct _stlink_backend *backend; 
    void *backend_data; 

    // Room for the command header 
    unsigned char c_buf[C_BUF_LEN]; 
    // Data transferred from or to device 
    unsigned char q_buf[Q_BUF_LEN]; 
    int q_len; 

    // transport layer verboseness: 0 for no debug info, 10 for lots 
    int verbose; 
    uint32_t core_id; 
    uint32_t chip_id; 
    int core_stat; 

    char serial[16]; 
    int serial_size; 

    enum stlink_flash_type flash_type; 
    stm32_addr_t flash_base; 
    size_t flash_size; 
    size_t flash_pgsz; 

    /* sram settings */ 
    stm32_addr_t sram_base; 
    size_t sram_size; 

    // bootloader 
    stm32_addr_t sys_base; 
    size_t sys_size; 

    struct stlink_version_ version; 
};