我从头文件生成了一个 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* 的正确方法是什么?
最佳答案
原来是错误的
handle = pbr.getPointer();
应该是
handle = pbr.getValue();
关于java - JNA:void** 和 void* 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137736/