さて、前節ではHm.Macro.Exec.Eval(...)を使った文字列での実行をしました。
これまでの秀丸の様々なメソッドの半数ほどは、「秀丸マクロ実行中のみ実行可能」というものが散見されたはずです
すなわち、一般的には「非同期中」は「秀丸マクロ実行中ではない」ため、
このため、Hm.Macro.Exec.Eval(...)のマクロへと値を伝達しようとしても、「マクロ実行中ではない」ため、Hm.Macro.Var などが利用できず、
値を伝搬するのも難しいという状況になります。
この問題を一気に解決するのが、「Hm.Macro.Exec.Method(...)」です。
Hm.Macro.Exec.Method(...)は、指定のC#メソッドを「改めて新規の秀丸マクロ実行中」にしつつ呼び出せ、
という命令となります。
マクロを実行していない時にのみ、実行することが出来ます。
Hm.Macro.Exec.Method(string message_parameter, Delegate delegate_method)
呼び出せるメソッドは
public static IntPtr your_method(string message_parameter)
の形です。
関数のdelegateではなく、次のように文字列ベースで「dll」や「クラス」や「メソッド名」を指定してもかまいません。
これはちょうど、秀丸マクロでhm.NETを使う際の「CallMethod」と似た引数だと気づくことでしょう。
通常は、別の.dllを指定するような場合、あるいは、何か「動的」で事前にはdelegateオブジェクトでは指定しにくい場合に利用できるかもしれません。
ただし一般的には、1番目で解説したDelegateを使った引数の方が「型チェック」や「存在チェック」が明白であるため、適しています。
Hm.Macro.Exec.Method(string message_parameter, string dllfullpath, string typefullname, string methodname)
Hm.Macro.Exec.Methodが最後まで実行できたならば、Messageプロパティに「message_parameter」で渡した値が入っていることでしょう。
途中でなんらかのエラーが発生した場合は、ErrorプロパティになんらかのExceptionオブジェクトが入っています。
何もエラーがなければ、nullが入っています。
前章の「HmNETTest.mac」と同一です。
一度マクロを実行し、「デバッグモニター」にどのように順次表示されるか確認しましょう。