shelarcy
shela****@capel*****
2004年 8月 16日 (月) 13:12:35 JST
On Mon, 16 Aug 2004 08:00:06 +0900 (JST), Kawai Shiro <pract****@yahoo*****> wrote: >> また、関数を直接バインドさせなくても define-enum でパラメーターを出 >> してやるだけで、同様にコアダンプを起こすようです。 > > 繰り返しになりますが、これだけではWinAPIが動かないということ以外、 > 何もわかりませんです。shelarcyさんがヘルプを求めていらっしゃるの > なら、具体的にどこをどうしたいのかを書いてください。そうでなければ、 > 動いた時に報告してください。 > > テクニカルタームは、文脈に大きく意味が依存したりするくせに、 > その意味は意外に厳密です。「直接的にWindows APIをバインド」とか > 「パラメータを出す」という言い方は、サポートする文脈がないと意味を > 持ちません。聞きかじりでよくわかっていない言葉を使うのではなく、 > なるべく自分で完全に理解している具体的な言葉で、問題を厳密に > 表現するように書きましょう。それを言い表すタームがあればその時に > 誰かが教えてくれるでしょう。 おっしゃる通り、言葉を厳密に使うと言うことについてあまりに無配慮でした。 「パラメータを出す」と言ったのは、(define-enum CS_HREDRAW) のような定義をし て、 static SCM_DEFINE_STRING_CONST(win_CS_HREDRAW__VAR__NAME, "CS_HREDRAW", 10, 10); static ScmObj win_CS_HREDRAW__VAR = SCM_UNBOUND; ... void Scm_Init_win(ScmModule *module) { win_CS_HREDRAW__VAR = Scm_Intern(&win_CS_HREDRAW__VAR__NAME); Scm_DefineConst(module, SCM_SYMBOL(SCM_OBJ(win_CS_HREDRAW__VAR)), SCM_OBJ(Scm_MakeInteger(CS_HREDRAW))); } に展開される部分で core dump が起きると言うつもりでした。 gauche-gl 等では何の問題もないので、どの辺りについて調べればいいのか 教えて頂きたいと思います。 「直接的にバインド」というのは、 (define-cproc win-set-timer (hWnd::<hwnd> nIDEvent::<u_int> uElapse::<u_int> lpTimerFunc::<timerproc>) (return <u_int> "SetTimer")) のような形でと言う意味でした。安易に逃げているところがあるので、もう 少し調べてみて行き詰まったら、今度こそ質問したいと思います。 > shelarcyさんは、全体をブラックボックスと考えて入力をいろいろいじって > 出力の変化を調べているようですが、それからの推測はことごとく外れて > います。ソースがあるんですから、コードの流れを逐次追って、その裏に > あるビットの流れをしらみつぶしに調べてゆくしか、方法はありません。 > WinAPIでcore dumpするなら、どこかで変なメモリを見ちゃっているん > でしょう。コードは逐次的に実行されるんですから、まずどの段階で > core dumpしているのかを見つけるのが第一歩です。それを見つける > までは、余分な予想はしないことです。多分外れですから。 一応見ていたのですが、あまりに雑な見方をしているのだと思います。 変なメモリを見ているのなら、確かに細部を見ていくしかありませんね。 もっときちんと見ていきます。 -- shelarcy <shela****@capel*****> http://page.freett.com/shelarcy/