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

  • 概要

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

  • スクリプト層

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

    ですので、あくまでも、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);
    

    実行イメージ