我是 Java 和 JNA 的新手。我正在使用 JNA 从 Java 加载和使用本机 DLL 函数。
我在将指针传递给数组时遇到问题。根据规范,我从 Java 填充这个数组并尝试将指向这个数组的指针发送到 DLL。
这就是本机调用的外观,
StartCom(UNUM8 *pCoPData)
From the spec: pCoPData -> Reference of the buffer holding the data
对应的JNA Mapping,
int[] buf = new int[2];
buf[0] = 0x1A;
buf[1] = 0x10;
Pointer pCoPData = new Memory(8);
pCoPData.write(0, buf, 0, buf.length);
Library.INSTANCE.StartCom(pCoPData);
当我执行上面的代码时,我从 dll 日志中注意到只使用了数组 0x1A 的第一个元素,而忽略了第二个字节。DLL 始终只看到数组的第一个元素。
我假设这个问题可能只有 2 种可能性,
1. The above approach I have taken to populate and send the address of a Java array to the DLL is incorrect.
2. The DLL is expecting a UNUM8* whereas I am sending a UNUM32*. I will try with byte[] instead of int[] and see if there is any difference.
有什么建议有很大帮助吗?请告诉我。提前谢谢了 !