最終更新日 2021-03-21

中間アセンブリとdllの解放・後片付け

非同期処理とdllの解放

まず覚えておくべき点は、
中間コードアセンブリを実行したdllは、
アプリケーションが終わるまでは解放されることはない
という特性があるということです。

これは秀丸の話ではなく、C#やC++/CLIで作成したもの全てに当てはまります。

途中で秀丸が終了された場合や、マクロの終了のタイミングの捕捉

中間アセンブリのコードは「dllmain」から実行することはできません。
このことは、「非同期処理」を書いた場合に、
「秀丸を突然閉じられた場合に、どうやって非同期処理を終了させるのかという問題が発生することを意味します。

これを解決するのが、「DllDetachFunc_After_Hm866」というexport関数の仕組みです。

もし、マクロのfreedllのタイミングを検知したい場合は、
「DllDetachFunc_After_Hm866」という関数をdllからexportしておきましょう。
秀丸が「マクロの終了」やfreedllの発生が無かった場合は、
「秀丸の終了」のタイミングで「DllDetachFunc_After_Hm866」を呼び出してくれます。

これにより、非同期を含め、様々な処理を後片付けが出来ます。