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

概要

ここでは、.NET Frameworkに最初から搭載されているdllを読み込む方法を記載しています。

スクリプト層

hmLNの設計方針を考慮すると、スクリプト層でゴリゴリと記述することは避けるべきです。

C#等で作成した.dll内で処理を済ませる方向性の方が、大抵は見通しが良くなるでしょう。
hmLNでは、「.dllへと値を渡す」こと・「.dllから値をもらうこと」に特化した方が上手くいきます。

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

フォームの実装

秀丸 v8.66ですので、マクロとwinform.luaを1つにするのが有力な選択肢となるでしょう。

PublicKeyTokenの調べ方はネットで検索してください。

#MNG = loaddll( hidemarudir + @"\hmLN.dll" );

if ( !#MNG ) {
    message("hmLN.dllが導入されていません");
    endmacro;
}

#_ = dllfuncw(#MNG, "DoString", R"MNG(
-- Load Forms
clr.System.Reflection.Assembly:Load("System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

local Forms = clr.System.Windows.Forms; -- create a local variable with a namespace
local iClicked : int = 0;

Forms.Application:EnableVisualStyles(); -- call a static method

do (frm, cmd = Forms.Form(), Forms.Button()) -- create a from and button in a using block
    frm.Text = 'こんにちわ♬';
    cmd.Text = 'クリック';
    cmd.Left = 16;
    cmd.Top = 16;
    cmd.Click:add( -- 「add」はイベントハンドラ追加。「remove」だとイベントハンドラ削除
        function (sender, e) : void
          iClicked = iClicked + 1;
          Forms.MessageBox:Show(frm, clr.System.String:Format('Clicked {0:N0} times!', iClicked), 'Lua',
                                     Forms.MessageBoxButtons.OK, Forms.MessageBoxIcon.Information);
        end);
    frm.Controls:Add(cmd);
    Forms.Application:Run(frm);
end;
)MNG"
);

freedll( #MNG );

実行イメージ

PICTURE