概要
C++で作成したdllは非同期処理などを含むことができますので、
「秀丸を閉じる」際などに、「スレッドを止める」あるいは「ファイルに書き込む」など必要な処理を行う必要があるような
dllを作成したいと思うこともあるでしょう。
秀丸エディタ 8.98以上ならば、COM呼び出しに対して、オブジェクト解放時にメソッドを指定して実行させることが出来ます。
DllDetachFunc_After_Hm866
DllDetachFunc_After_Hm866が定義されていれば、秀丸マクロは、freedll、あるいは、プロセス終了時にそれを呼び出します。
呼び出し側
「DllDetachFunc_After_Hm866」を利用したいと思う場合、以下のように一般的には、freedllをせずdllを常駐させるといった形となるでしょう。
マクロ実行後に必ずdllを解放するならば、keepdllが必須 (秀丸エディタ 8.98以降)
常駐させるのではなく、「マクロ実行後は必ずdllを解放する」ような通常の同期型のdllならば、
以下のようにkeepdllとfreedllを両方記述するようにしましょう。
秀丸 8.98未満の場合には、keepdllは使えませんのでやむをえません。freedllのみの記述にしましょう。
秀丸エディタ 8.98未満の場合にkeepdllでエラーが出る現象を回避するには
keepdll を利用する場合、秀丸8.98以上でないとマクロ自体がエラーが出てしまいます。
if文でバージョンを判定したとしても、先にマクロ全体がチェックされてしまうため、秀丸8.97以下ではkeepdllの記述が存在するだけでエラーとなります。
これを回避するには、evalを利用するのが良いでしょう。
これにより 秀丸エディタ 8.66以上であればエラーが出ない形に出来ます。