java - 通过 JNA 检索数组

标签 java x11 jna

我在从被调用函数分配的内存块中获取信息时遇到问题。具体来说,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/

相关文章:

java - ExecutorService 单线程执行器

linux - 绕过 Xserver 显示管理

mouse - 是否可以映射按键以模拟 xwindows 中的中键?

java - 无法从本地系统帐户检索进程信息

适用于 Windows VHD API 的 Java 库

java - 在Java中,我可以跟踪每种情况的switch语句中的所有值吗?

java - 如何在扩展 MapActivity 时包含 GoogleMaps.apk 文件

java - SimpleDateFormat 的 ThreadLocal 变量(或)新的 SimpleDateFormat - 正确吗?

python - 在不显式打开 X11 的情况下启动 Python 脚本

java - 程序退出时的 JNA 错误