Я сгенерировал 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?