java - JNA:void** 和 void* 之间的转换

标签 java c jna ftdi jnaerator

我从头文件生成了一个 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/

相关文章:

java - Apache Sling 循环重复

java - Sherlock FragmentActivity 无法解析为类型

java - Java 中字节数组的 Base64 和它在 PHP 中的等效

c - 跟踪客户端-服务器事务 - c 中的套接字

c++ - "two-graph"中更改次数有限的最短路径

java - 如何使用 guice 仅注入(inject)一个变量?

c - BSD 操作系统上的原始套接字

java - JNA 库,缺少 Windows 函数 : how to add new functions?

java - 用 Java JNA 编写的 key 监听器。防止多次回调

java - 如何使用 Java Native Access 为 Java.exe 以外的进程设置进程亲和性?