我在从被调用函数分配的内存块中获取信息时遇到问题。具体来说,JNA 附带的 X11 库中有函数 XGetWindowProperties
。它通过最后一个参数 - PointerByReference prop_return
返回结果。
我知道实际的内存区域包含一个Window
数组。但我如何创建这些对象呢?我看不到任何方法可以从指针本身获取它,并且无法从中获取 Buffer,因为我不知道 Window 的大小。
真正的函数是:int XGetWindowProperty(...., unsigned char **prop_return)
并且使用我调用它的参数,它实际上是int XGetWindowProperty(.. ..,窗口 *prop_return[])
.
最佳答案
返回数据中元素的大小由 XGetWindowProperty() 返回的“格式”定义,但有一个令人讨厌的异常(exception)。 Xlib 始终将格式 32 作为“long”数组返回,即使“long”是 64 位。窗口的格式为 32。
在快速谷歌搜索中,您可以使用 NativeLong.SIZE 在 JNA 中确定这一点。 因此,如果 (NativeLong.SIZE == 8) 您有一个 64 位窗口 ID 的缓冲区,否则有 32 位窗口 ID 的缓冲区。
每个值的字节顺序应与您所在的 CPU 匹配。
关于java - 通过 JNA 检索数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4232631/