最終更新日 2024-09-25
「hmJS」で既存の.NETのクラスを込みこむ
概要
ここでは、.NET Frameworkに最初から搭載されているものの、
手動で参照を追加する必要があるdll(例えばSystem.Windows.Formなど)を読み込む方法を記載しています。
スクリプト層
hmJSは、.NETのアセンブリの読み込みなどには対応しています。
しかし、根本的な部分で、hmJS の JavaScript は JScript ですのでガッチリとしたフルスペックの「クラス」の仕組み
は存在しません。
ですので、あくまでも、C#等で作成した.dll内で処理を済ませ、JavaScriptでは、それを呼ぶ、という方向性の方が、
見通しが良くなるハズです。
hmJSでは、「.dllへと値を渡す」こと・「.dllから値をもらうこと」に特化した方が上手くいきます。
しかし、このページでは、あえて「hmJS」の「スクリプト層」でゴリゴリと記述する例として紹介しています。
フォームの実装
#JS = loaddll( hidemarudir + @"\hmJS.dll" );
#_ = dllfuncw( #JS, "DoString", R"(
var addlib = host.lib("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
var TForms = addlib.System.Windows.Forms;
var TForm = TForms.Form;
var frm= new TForm();
frm.Text = "こんにちわ";
var iClicked = 0;
var TButton = TForms.Button;
var btn = new TButton();
btn.Text = "クリック";
btn.Left = 16;
btn.Top = 16;
btn.Click.connect(function (sender, args) {
iClicked++;
hm.debuginfo("ボタンが押されたよ!!");
TForms.MessageBox.Show(iClicked.toString());
hm.Macro.Var('$count', iClicked.toString());
// 秀丸マクロとして一連の文字列を実行
hm.Macro.Eval( function() { /*
// アウトプット枠へ出力
#OP = loaddll("HmOutputPane.dll");
#ret = dllfunc(#OP, "Output",hidemaruhandle(0), $count);
freedll(#OP);
*/ } );
});
frm.Controls.Add(btn);
frm.ShowDialog();
)");
freedll(#JS);
実行イメージ