最終更新日 2024-09-25

「hmJS」で既存の.NETのクラスを込みこむ

概要

ここでは、.NET Frameworkに最初から搭載されているものの、
手動で参照を追加する必要があるdll(例えばSystem.Windows.Formなど)を読み込む方法を記載しています。

スクリプト層

hmJSは、.NETのアセンブリの読み込みなどには対応しています。
しかし、根本的な部分で、hmJS の JavaScript は JScript ですのでガッチリとしたフルスペックの「クラス」の仕組み
は存在しません。

ですので、あくまでも、C#等で作成した.dll内で処理を済ませ、JavaScriptでは、それを呼ぶ、という方向性の方が、
見通しが良くなるハズです。
hmJSでは、「.dllへと値を渡す」こと・「.dllから値をもらうこと」に特化した方が上手くいきます。

しかし、このページでは、あえて「hmJS」の「スクリプト層」でゴリゴリと記述する例として紹介しています。

フォームの実装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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);

実行イメージ