[Gauche-devel-jp] Re: genstub を使った winapi のバインドでコアダンプ

Back to archive index

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/



Gauche-devel-jp メーリングリストの案内
Back to archive index