0

呼び出された関数によって割り当てられたメモリ ブロックから情報を取得する際に問題が発生しました。具体的にはXGetWindowProperties、JNA に含まれる X11 lib に機能があります。最後のパラメーター - を介して結果を返しますPointerByReference prop_return

実際のメモリ領域に の配列が含まれていることはわかっていますWindow。しかし、これらのオブジェクトを作成するにはどうすればよいでしょうか? Bufferのサイズがわからないため、ポインター自体から取得する方法がわかりませんWindow

実際の機能は次のとおりです。int XGetWindowProperty(...., unsigned char **prop_return)私が呼び出しているパラメーターを使用すると、実際にはint XGetWindowProperty(...., Window *prop_return[]).

4

2 に答える 2

2

返されるデータの要素のサイズは、XGetWindowProperty() から返される「フォーマット」によって定義されますが、厄介な例外が 1 つあります。"long" が 64 ビットであっても、Xlib は常にフォーマット 32 を "long" の配列として返します。ウィンドウのフォーマットは 32 です。

簡単な Google 検索では、NativeLong.SIZE を使用して JNA でこれを判断できます。したがって、(NativeLong.SIZE == 8) の場合は 64 ビット ウィンドウ ID のバッファーがあり、それ以外の場合は 32 ビット ウィンドウ ID のバッファーがあります。

各値のバイト順は、使用している CPU と一致する必要があります。

于 2010-11-20T13:11:06.837 に答える
1

最初に、プリミティブ型の配列(intまたは必要に応じてlong)としてデータを抽出する必要があります。次に、配列のXIDを使用して、必要に応じてX11.Windowオブジェクトを作成できます。

この一部を自動的に処理するようにコンバーターを設定することは可能ですが、最終的には、1回限りの変換を明示的に行う方が簡単です。

于 2011-05-06T12:58:33.903 に答える