代码之家  ›  专栏  ›  技术社区  ›  viraptor

通过JNA检索数组

  •  0
  • viraptor  · 技术社区  · 14 年前

    我无法从被调用函数分配的内存块中获取信息。具体来说,有功能 XGetWindowProperties 在JNA包含的x11 lib中。它通过最后一个参数返回结果- PointerByReference prop_return .

    我知道实际的存储区域包含 Window . 但是如何创建这些对象呢?我看不出从指针本身得到它的任何方法,我也无法得到 Buffer 因为我不知道 窗口 .

    真正的功能是: int XGetWindowProperty(...., unsigned char **prop_return) 我称之为参数,实际上 int XGetWindowProperty(...., Window *prop_return[]) .

    2 回复  |  直到 11 年前
        1
  •  2
  •   Havoc P    14 年前

    返回数据中元素的大小由xGetWindowProperty()返回的“format”定义,但有一个令人恼火的异常。xlib总是以“long”数组的形式返回格式32,即使“long”是64位。窗口的格式为32。

    在Google的快速搜索中,您可以使用native long.size在JNA中确定这一点。 因此,如果(nativelong.size==8),您有一个64位窗口ID的缓冲区,而不是32位窗口ID的缓冲区。

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

        2
  •  1
  •   gpmcadam    13 年前

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

    可以设置转换器来自动处理其中的一些问题,但最终一次性完成显式转换会更简单。