ここではhm.NETの基本的な使い方が段階的に説明しています。
読者の想定レベルとしては、
といった程度のプログラミング力・開発環境を想定しています。
繰り返しとなりますが、.NET Frameworkが対象となります。
Visual Studio 2019以降では、.NET Frameworkより.NETが優先的に出てきますが、
「.NET Core 3.1」や「.NET 5.0~.NET 8.0」は hm.NET の対象ではありません。
C#側の最も簡単な関数定義の入り口となります。
秀丸マクロから直接呼び出す関数は「publicかつstatic」である必要があります。
秀丸マクロから直接呼び出す関数は、引数や返り値が「IntPtr」もしくは「String」である必要があります。
IntPtrなのは、秀丸マクロが「32bit版だと数値が32bit」「64bit版だと数値が64bit」だからです。
C#9.0からは「32bit版だと数値が32bit」「64bit版だと数値が64bit」という目的のため専用の「nint」という型名も追加されました。
(nintの詳細はIntPtr より便利な nint)
今回の例では
という単純な例となります。
最も簡単なhm.NETの使用例となります。
CallMethodにより秀丸マクロからC#で作ったdll上のメソッドを呼び出すことが出来ます。
(※便宜上「中間アセンブリのdll」といった意味を代弁するものとして「C#で作ったdll」という呼び方をします。
実際にはC#である必要性はなく、VB.net、C++/CLI、F#で制作した中間アセンブリのdllも呼び出せます。)
この当たりは説明の必要はないかと思います。
dllのフルパス、そして「名前空間+クラス名」が指定されています。
通常はdllは、呼び出し元のマクロ(下記の例ではtest01.mac)と同じフォルダに入れておきましょう。
引数は0個~4個までなら好きに指定できます。
引数の最大個数が4つまで、というのは少ないという印象を受けるかもしれません。
しかし、現実問題として多くの引数を渡す必要性が無いのです。
必要性がない理由としては、後の章にて説明されますが、簡単に触れておくと
C#側から秀丸マクロ上の変数を直接読み取ることが出来るため、多数の引数として渡す必要性が低い
ためです。
返り値が数値なら「dllfuncw」を、返り値文字列なら「dllfuncstrw」を利用します。
hm.NETをfreedllしないで下さい。
hm.NETは一度プロセスに呼び出した後は、
該当の秀丸のプロセスが終了するまで解放されるべきではありません。