まず覚えておくべき点は、
中間コードアセンブリを実行したdllは、
アプリケーションが終わるまでは解放されることはない
という特性があるということです。
これは秀丸の話ではなく、C#やC++/CLIで作成したもの全てに当てはまります。
中間アセンブリのコードは「dllmain」から実行することはできません。
このことは、「非同期処理」を書いた場合に、
「秀丸を突然閉じられた場合に、どうやって非同期処理を終了させるのかという問題が発生することを意味します。
これを解決するのが、「DllDetachFunc_After_Hm866」というexport関数の仕組みです。
もし、マクロのfreedllのタイミングを検知したい場合は、
「DllDetachFunc_After_Hm866」という関数をdllからexportしておきましょう。
秀丸が「マクロの終了」やfreedllの発生が無かった場合は、
「秀丸の終了」のタイミングで「DllDetachFunc_After_Hm866」を呼び出してくれます。
これにより、非同期を含め、様々な処理を後片付けが出来ます。