|
こちらですが、やはり、「デフォルトでの関数名」も決まっていたほうがよさそうで
す。
例えば、
8.64以前までの記述として、
■8.64までの記述
----------------------------------------------------
#dll = loaddll( hidemarudir + @"\hmPy.dll" );
#r = dllfunc( #dll, "DoFile", hidemarudir + @"\a.py" );
#_ = dllfunc( #dll, "DestroyScope" ); // ここがターゲット
freedll(#dll);
----------------------------------------------------
これが
■8.66以降での記述
----------------------------------------------------
#dll = loaddll( hidemarudir + @"\hmPy.dll" );
setdlldetachfunc #dll, "DestroyScope";
#r = dllfunc( #dll, "DoFile", hidemarudir + @"\a.py" );
freedll(#dll);
----------------------------------------------------
となります。
8.64までと比べると、マクロ途中での秀丸の終了にも対応しているため、
機能的に向上していますが、
「dllを使用する側(マクロ記述側)」が、明示的に「(今回の例の)DestroyScope」を
設定する意味は、薄いと感じます。
使用者側ではなく、原則的にはdll制作側と秀丸とで、名前を取り決め、
暗黙裡に呼び出した方が、「dll製作者」にとっても「dll利用者」にとっても、「使
用間違い」発生せず、お互いにありがたいハズです。
■本来あるべき姿
----------------------------------------------------
#dll = loaddll( hidemarudir + @"\hmPy.dll" );
#r = dllfunc( #dll, "DoFile", hidemarudir + @"\a.py" );
freedll(#dll); // この記述で(デタッチされなかったとしても)必要な後片付けはぐ
らいはするようdll製作者が組んでおく、秀丸はそれをfreedllの一環として呼び出す
----------------------------------------------------
■呼び出す関数名の名前
「Hidemaru_Evh_DllProcessDetach」
とかでいかがでしょう。
これなら既存のものと、名前が被らないことが期待できると思います。
(もし将来addeventhandlerとかに切り替えた際にも、対関係が構築しやすそうです)
|
|