2013-08-08 3 views
1

Я сгенерировал JNA из файла заголовка, и вот две представляющие интерес функции.JNA: преобразование между void ** и void *

FT_STATUS FT_OpenEx(void* pArg1,int Flags,void** pHandle); 

FT_STATUS FT_Close(void* ftHandle); 

И вот как оно преобразовано в JNA.

int FT_OpenEx(String pArg1, int Flags, PointerByReference pHandle); 

int FT_Close(Pointer ftHandle); 

Я называю FT_OpenEx прохождения PointerByReference, а затем получить указатель и передать его в FT_Close. Код выполняется, но я получаю FT_INVALID_HANDLE, который возвращается FT_Close.

Вот код Java

Pointer handle; 
PointerByReference pbr = new PointerByReference(); 
int status = Ftd2xxLibrary.INSTANCE.FT_OpenEx(serialNumber, Ftd2xxLibrary.FT_OPEN_BY_SERIAL_NUMBER, pbr); 

handle = pbr.getPointer(); 

status = Ftd2xxLibrary.INSTANCE.FT_Close(handle); 

Моя догадка, что указатель Перехожу к FT_Close не на самом деле указывает на правильном адресе. Каков правильный способ перехода от void ** к void * в java с помощью JNA?

ответ

3

Оказывается, ошибка была на

handle = pbr.getPointer(); 

Это должно быть

handle = pbr.getValue(); 
Смежные вопросы