|
秀まるおさん今日は、ひろです。
hidesoft.8:01565 は、送信直前に読みましたが、それを考慮してもおか
しな事があるので、読む以前の原稿をほぼそのまま投稿します。
> 1つは、ddeを終了させないまま別のウィンドウ上でddeを開始するようなことを、
> 3重にやった場合です。2重までならエラーにならないはずです。
別ウィンドでは DDE をやっていません。つまりログに 2 重に残っている
時点で実際とはズレがあります。 ^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^
また頻繁に再現する操作 (別のマクロ実行直後に、問題となっている DDE
マクロを使用する) をしていたら、落ちてしまうことあります。ログは、
> 19:12:18.060 (3082) エディタコマンド: 40056
> 19:12:18.060 (6175) BeginNewAtachList
> 19:12:18.120 (3082) エディタコマンド: 40095
> 19:12:18.120 (4079) ProcessCommand 40095
> 19:12:22.180 (4079) ProcessCommand 40038
> 19:12:22.240 (7132) ThreadFunc: HmCreate
> 19:12:22.240 (2390) call WinMainSub
> 19:12:22.240 (2390) FrameWndProc: WM_CREATE
> 19:12:22.240 (2390) ClientWndProc: WM_CREATE
> 19:12:22.240 (2390) return WinMainSub
> 19:12:22.240 (7134) HmCreate return
> 19:12:28.940 (2390) apDdesub[0] reserved, this=017088CE
> 19:12:33.110 (2390) apDdesub[0] released, this=017088CE
> 19:12:35.640 (2390) apDdesub[0] reserved, this=017088CE
となっており、dump.txt への出力はなく、エラーメッセージの詳細は、
> TURUKAME のページ違反です。
> モジュール : HIDECTL2.DLL、アドレス : 0167:0156cb32
> Registers:
> EAX=00000001 CS=0167 EIP=0156cb32 EFLGS=00010246
> EBX=00000000 SS=016f ESP=0286f448 EBP=0286f4d0
> ECX=cd26a940 DS=016f ESI=017088ce FS=4b67
> EDX=00001577 ES=016f EDI=00000000 GS=0000
> Bytes at CS:EIP:
> 89 7e 0c 89 7e 04 39 35 78 f6 5c 01 75 1f 56 8d
> Stack dump:
> 000012d2 0170ca8a 00035a70 4b67016f 0c370000 00000000 03698470
> bff713e2 00000167 bff742f2 000294c4 000294c4 bff728a2 bff728a2
> bfc02526 02867000
です。
なお直前に使用するマクロとは、
if(filename == ""){
loaddll "tkinfo.dll";
if(!result){
message "ファイルを保存してから実行してください";
goto End;
}
if(dllfunc("IsTuruKame")){
goto TuruKame;
}
}
else goto Hidemaru;
TuruKame:
##main = dllfunc("MainWnd");
if(##main == 0){
##open = 1;
##handle = hidemaruhandle(0);
if(dllfunc("IsTrayIcon")){
##main=sendmessage(findwindowclass("TuruKameFrame"),0x0112, 0xF120, 0 );
setactivehidemaru ##handle;
##main = dllfunc("MainWnd");
}
else{
message "本体が起動していないと、実行できません。";
goto End;
}
}
$$account = dllfuncstr("ExecAt",##main,"CurrentAccount");
$$folder = dllfuncstr("ExecAt",##main,"CurrentFolder");
##mailType = dllfunc("MailType");
if(##mailType != 0 && ##mailType != 5){
message "「草稿」「未送信」に保存された送信メールしか実行できません";
goto End;
}
if(!readonly)execmacro macrodir + "\\turukame\\OverWrite.mac";
loaddll "tkinfo.dll";
$$draftAccount = dllfuncstr("CurrentAccount");
$$draftFolder = dllfuncstr("CurrentFolder");
if($$draftFolder != "草稿" && $$draftFolder != "未送信"){
message "送信メールしか実行できません";
goto End;
}
##handle = hidemaruhandle(0);
$fileName = dllfuncstr("MailFilePath");
if(##handle != ##main){
if(!dllfunc("Sync"))goto Error;
}
else{
message "エディタ・ウィンドでしか動作しません。";
goto End;
}
if(!dllfunc("SetMainWndTop"))goto Error;
closehidemaru ##handle;
if(!dllfunc("ExecAt",##main,"SelectFolder",$$account,""))goto Error;
runsync2 "ispell -L20 -M -j -de:/usr/local/share/ispell/US-xlg.hash -x \""
+ $fileName + "\"";
if(!dllfunc("ExecAt",##main,"RemakeList",$$draftAccount,$$draftFolder))
goto Error;
if(!dllfunc("ExecAt",##main,"SelectFolder",$$draftAccount,$$draftFolder))
goto Error;
if(!dllfunc("OpenMail"))goto Error;
if(!dllfunc("ExecAt",##main,"SelectFolder",$$account,$$folder))goto Error;
if(##open)##tmp = dllfunc("ExecAt",##main,"Exit");
goto End;
Error:
message "DLL error";
End:
freedll;
endmacro;
Hidemaru:
freedll;
if(!readonly)save;
if((charset & 64) & (!(charset & 128)))##lf = 1;
##charset = charset & 63;
if(##charset == 2 || ##charset == 5 || ##charset == 6){
message "非対応文字コードです";
endmacro;
}
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
##Timestamp = getregnum("Timestamp");
##Sharing = getregnum("Sharing");
##DupOpen = getregnum("DupOpen");
writeregnum "Sharing",0;
writeregnum "DupOpen",0;
writeregnum "Timestamp",0;
closereg;
envchanged;
reopen;
runsync2 "ispell -L20 -M -j -de:/usr/local/share/ispell/US-xlg.hash \""
+ filename2 + "\"";
openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
writeregnum "Sharing",##Sharing;
writeregnum "DupOpen",##DupOpen;
writeregnum "Timestamp",##Timestamp;
closereg;
envchanged;
reopen;
if(!##lf){
if(##charset == 1)saveas filename2, sjis;
else if(##charset == 3)saveas filename2, euc;
else if(##charset == 4)saveas filename2, jis;
}
endmacro;
という内容のマクロで、DOS アプリケーションと連携しています。ただしこ
のマクロは、単独で何度利用してもエラーで落ちるようなことはなかったと
記憶しています。
また DDE を利用しているマクロとは、ライブラリに登録してある「PDICW
DDE Popup Search macro for 秀丸」です。このマクロは私の環境では、浮
動小数点版秀丸で何故上手く動作しないのですが、秀丸担当さんのところで
再現せず (hidesoft.2:08278 のスレッド)、問題先送りの状態です。この様
なことからひょっとすると (通常版の) 秀丸で顕在化しないもんだいが、鶴
亀や浮動小数点版秀丸で顕在化しているのかもしれません。
|
|