概要
Hm.NetCOMをはいうなればただのインプロセス用のライブラリに過ぎませんから、
インプロセスでロード(該当秀丸プロセスと同じプロセスへとロード)されるのであれば、
.dll 形式である必要もなく、.exeでも.dll同様に扱うことが出来ます。
WPFのアプリケーションを「.NET Framework」で作成
このサンプルでは、.NET Frameworkを利用します。
my_button の Click のイベントハンドラからメソッドを自動生成して...
自動生成しなくとも、ご自分で MainWindow.xaml.cs を直接編集する形でももちろんOKです。
my_textbox の内容を、秀丸のアウトプット枠へと出力する短いソース例にしてみましょう。
秀丸マクロから直接呼び出されるメソッドを定義
定義場所に迷うところですがが、 App.xaml.cs が空っぽですので、ここが良いでしょう。
秀丸マクロ側のソース
呼び出し側のマクロを用意しましょう。
マクロが終わっても、WpfApp1のオブジェクトが解放されたりしないよう、keepobjectしています。
また、秀丸が終了した際に、実行してほしいメソッドとして、C#内の OnDetachMethod を指定しています。
WpfApp1.exeと、このWpfWpfTest.mac の2つのファイルを同一のディレクトリに配置して、マクロを実行してみましょう。
On_Click は非同期メソッドなので...
非同期メソッド中は、通常マクロ中ではないため、Hm.NetCOMで利用できる機能が制限されてしまいます、
それを打開する Hm.Macro.Exec.DoMethod(...) があることを思い出してください。
MainWindowのインスタンス(this)を static メソッドから参照するため、static変数 self へと this を伝搬しているところが工夫となります。
Hm.Macro.Exec.DoMethod を利用することで、非同期メソッド中であっても、秀丸マクロを「改めて実行」するため、
Hm.Macro.Var["..."] や Hm.Macro.Funtion(...)、Hm.Macro.Statement(...) が利用可能となります。
これにより、非同期中独特の制限が大きく解けて、秀丸側から提供されているマクロ関数等の機能を利用しやすくなります。