0

我从被调用函数分配的内存块中获取信息时遇到问题。具体来说,XGetWindowPropertiesJNA 附带的 X11 库中有函数。它通过最后一个参数 - 返回结果PointerByReference prop_return

我知道实际的内存区域包含一个Window. 但是如何创建这些对象?我看不到任何从指针本身获取它的方法,也无法从中获取 a Buffer,因为我不知道Window.

真正的功能是:int XGetWindowProperty(...., unsigned char **prop_return)使用我调用它的参数,它实际上是int XGetWindowProperty(...., Window *prop_return[]).

4

2 回答 2

2

返回数据中元素的大小由 XGetWindowProperty() 返回的“格式”定义,但有一个烦人的例外。Xlib 始终将格式 32 作为“long”数组返回,即使“long”是 64 位也是如此。窗口的格式为 32。

在快速谷歌搜索中,您可以使用 NativeLong.SIZE 在 JNA 中确定这一点。因此,如果 (NativeLong.SIZE == 8) 您有一个 64 位窗口 ID 的缓冲区,否则为 32 位窗口 ID。

每个值的字节顺序应与您所在的 CPU 匹配。

于 2010-11-20T13:11:06.837 回答
1

您需要首先将数据提取为原始类型(int 或 long,视情况而定)的数组。然后,您可以根据需要使用数组中的 XID 构造 X11.Window 对象。

可以设置转换来自动处理其中的一些,但最终一次性显式地进行转换更简单。

于 2011-05-06T12:58:33.903 回答