田楽DLLが強制終了No.01494
安久津 さん 00/08/08 18:10
 
こんにちは杉浦さん。
たびたびお世話になっている安久津です。

●環境
Win95 B
P-166MMX, 32MB #貧相 (^^;)。これが原因か?(ToT)
秀丸 3.05
田楽DLL 1.50

●データファイル「dic.dat」( 226KB )
0,A
1,a
2,ABORT
3,ABORTED
4,abortGrabbing()
5,ABOVE_BOTTOM
6,ABOVE_TOP
7,abs(
--- 省略 ---
10161,_tk_wstring
10162,_type()
10163,_write(
[a],0
[ab],2
[abo],2
[abs],7
[ac],29
--- 省略 ---

●マクロ
// call loadDengakuDll; if( ##return == 0 ){ beep; endmacro; }
  gofiletop; if( code != 0x0d ) insertfix "\n";
  searchdown "^.+$", regular;
  while( result ){
    $$tmp = gettext( seltopx, seltopy, selendx, selendy );
    escape;
    ##k = strstr($$tmp,",");
    $$name = leftstr($$tmp,##k); //
    $$value = rightstr($$tmp,strlen($$tmp)-##k-1);
    if( ! dllfunc("SETVAR","@"+$$name,$$value) ){ beep; endmacro; }
//    if( tickcount > #__TICK ){
//      title str(lineno) + $__EOF; #__TICK = tickcount + 2000;
//    }
    finddown;
  }

●結果
HIDEMARU のページ違反です。
モジュール : DENGAKUDLL.DLL、アドレス : 0217:00ffde6e
Registers:
EAX=6a88b730 CS=0217 EIP=00ffde6e EFLGS=00010286
EBX=011300c0 SS=021f ESP=006aeff8 EBP=8337af88
ECX=01130020 DS=021f ESI=8d5016fc FS=3caf
EDX=00000003 ES=021f EDI=8337af90 GS=0000
Bytes at CS:EIP:
89 50 04 8b 11 89 79 04 2b c2 5f 5e 83 c0 08 c2
Stack dump:
006af03c 832fb008 00ff3ae6 0000000c 006af054 bff77411 000000cf 00000001
00000005 00ff4247 00000011 006af034 bff77411 000000cf 006af088 0100a37c

●推測
どうも、[a],0 を登録しているときに、強制終了になっているみたいです。

    if( ! dllfunc("SETVAR","@"+"[a]","0") ){ beep; endmacro; }

しかし、別のデータファイル( 9KB )に存在する [a],0 の組を登録しても、
その場合は強制終了になりません。

●説明
つい3日前に、最新の 田楽DLL を入れたら、
SETVAR とかがあることに気づいた。ハッピー。(^^)
データファイルとマクロの意図は、入力補完です。
ちなみに、[a],0 とか [abs],7 とかは、検索を速めるためのインデックスに
使っています。

問題の起こるデータファイルは、Java用の識別子を詰め込んであります。
ちょっと大きなデータを登録したらどんな感じかなと思ってやっただけで、
実際は使っていません。よって全く困っていません。

とりあえず、ここに書き込みましたが、
後は杉浦さんのホームページに書き込むかもしれません。
#ダイアルアップ接続なので書き込むの面倒で。(^^;)

ではでは。

[ ]