1

我从头文件中生成了一个 JNA,这是两个感兴趣的函数。

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 的指针实际上并没有指向正确的地址。使用JNA在java中从void**传递到void*的正确方法是什么?

4

1 回答 1

3

原来错误是开启的

handle = pbr.getPointer();

它应该是

handle = pbr.getValue();
于 2013-08-08T23:15:40.383 回答