同一マクロの2回め以降の実行時のハングNo.35575
nishi3da さん 17/02/09 07:35
 

はじめまして、nishi3daと申します。

5年ほど前に秀丸(Ver8.10 32bit)+Dengaku.dll(3.2.0)環境で、マクロ開発を
しておりました、諸事情により開発停止していたのですが、過去のマクロの使用・開
発することになり、最新版にて環境を構築しました。

大体のマクロの使用は問題なかったのですが、一部のマクロが初回の起動・動作に問
題はないのですが、2回(〜4回)目で秀丸がハングアップしてしまいます(5年ほど
前は正常に動作していました)。

過去ログ「RE:33311 秀丸64bit のハングアップ」の、"ENDDIALOG"を見つけましたが
こちらはマクロ中で実施済みでした。

エラーメッセージも無くハングアップしてしまうため、原因の特定が難しく、なにか
変更点が影響しているのかを知りたくて質問させていただきました。
原因特定に有効なログの確認方法等がありましたら、ご教示をよろしくお願いいたし
ます。

また、なにか必要な情報等がございましたらご連絡下さい。

[ ]
RE:35575 同一マクロの2回め以降の実行時No.35576
秀丸担当 さん 17/02/09 10:13
 

秀丸エディタのどのバージョンでも起きて、必ず再現するようなことだとしたら、
こちらでも再現できるようにすれば原因は特定できると思います。
差し支えなければマクロの内容や[その他]→[設定内容の保存/復元]で設定をフ
ァイルに保存したものを送っていただけると、こちらでも確認できると思います。
送っていただける場合、"PEH00775@nifty.com"まで秀丸担当宛てと書いて送って
いただけると助かります。

もし秀丸エディタを入れ替えたことによって起きるということだとしたら、何ら
かのバグの可能性もあると思います。
起きるバージョンと起きないバージョンの違いなど、他にも起きるときと起きな
いときの違いが、できるだけ多くわかると手がかりになります。

具体的なマクロがわからないのでなんともいえないですが、参考情報として…
以前にあった事例と同じようなことだとしたら、freedllを呼ぶところの直前だ
けでなく、マクロが終了するときや、他のloaddllをするときにもENDDIALOGを呼
んでおいたほうがいいと思います。
またはloaddllを複数呼ぶ場合はloaddll関数を使うと回避することができます。

(freedllの前だけではない例)
loaddll "dengakudll.dll";
//〜処理〜
#dummy=dllfunc("ENDDIALOG");
endmacro;

(良くない例)
loaddll "dengakudll.dll";
loaddll "hmjre.dll";//ここでdengakudll.dllは解放される
//〜処理〜
#dummy=dllfunc("ENDDIALOG");//NG

(良い例)
#dll1 = loaddll("dengakudll.dll");
#dll2 = loaddll("hmjre.dll");
//〜処理〜
#dummy=dllfunc(#dll1,"ENDDIALOG");//OK

[ ]
RE:35576 同一マクロの2回め以降の実行時No.35580
nishi3da さん 17/02/09 18:56
 

早速のご回答ありがとうございました。

結論から書きますと、「#dummy=dllfunc("ENDDIALOG");」で回避させることができま
した。

ESCキーを押下後の処理に上記を記述した所正常に動作するようになりました。

丁寧な対応をありがとうございました。

[ ]