最終更新日 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);

実行イメージ