non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

LG3D@FC3test3_x86_64への道のり その2

なんとか64bit環境でLG3Dが動いたのですが、Xのネイティブアプリの動作でXサーバごと落ちてしまいます。

以下は、それまでの備忘録です。

X Japanese Documentation Project

上記のURLにて久々にXのAPIを復習し、

XEvent構造体をJava側(LG3D)ではint[24]として受け取っているが、

64bit環境ではsizeof(XEvent)が192となってしまい、int[24]としてはそのままでは受け取れない!

が、これは以下のようにしたら解決しました。

j = 0;

for(i = 0; i < 48; i=i+2) {

tmp_v1 = ((int *)&xevent)[i];

tmp_v2 = ((int *)&xevent)[i+1];

if(j==8 || j== 10) {

tmp_efa[j++] = tmp_v1;

tmp_efa[j++] = tmp_v2;

} else {

tmp_efa[j++] = tmp_v1;

}

}

(*env)->SetIntArrayRegion(env, efa, 0, 24,

(long*)tmp_efa);

以下もかなり本日の作業の役にたちました。